Reputation: 81
I need to check if the fields already exist. If that field doesn't exist, then I need to create a new one. Like the availability check on a booking system
# Choices
time = [
('1', 'Morning'),
('2', 'Afternoon'),
('3', 'Evening'),
('4', 'Night'),
]
# Model
class Calender(models.Model):
user = models.ForeignKey(AUTH_USER_MODEL,on_delete=models.SET_NULL)
date = models.DateField()
time = models.CharField(max_length=10, choices=time)
location = models.CharField(max_length=32)
class CheckAvailabilityAPIView(APIView):
def post(self, request):
date = request.data.get('date')
time = request.data.get('time')
location = request.data.get('location')
calender = Calender.objects.all()
for obj in calender:
if obj.booked_date == date and obj.time == time and obj.location == location:
return Response({'response': 'Already exist'})
else:
user_id = request.user.id
user = User.objects.get(id=user_id)
serializer = VendorsCalenderSerializer(data=request.data)
if serializer.is_valid():
serializer.save(
user=user,
date=date,
time=time,
location=location
)
return Response({'response': 'Success', 'result': serializer.data})
else:
return Response({'response': 'Failed', 'error': serializer.errors},
status=status.HTTP_400_BAD_REQUEST)
Can someone help me with this.?
Upvotes: 0
Views: 643
Reputation: 1930
You can also use filter :
calender = session.query(Calender).filter_by(**kwargs).first()
if calender:
return Response({'response': 'Already exist'})
else:
Upvotes: 0
Reputation: 4635
You can try using get_or_create()
Something like this :
appointment, created = Calender.objects.get_or_create(
user=user,
date=date,
time=time,
location=location
)
Returns a tuple of (object, created), where object is the retrieved or created object and created is a boolean specifying whether a new object was created.
Then based on created
you can return customised response.
Reference : https://docs.djangoproject.com/en/2.2/ref/models/querysets/#get-or-create
And maybe their is a typo in Calender
. Maybe you meant Calendar
.
Upvotes: 1
Reputation: 386
change calender = Calender.objects.all() to calender, result = Calender.objects.get_or_create(booked_date= date, section_timing = time, location = location) if result is True, then new calender is created
Upvotes: 0