Mike_Wazowski
Mike_Wazowski

Reputation: 81

How to check if the fields already exist.?

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

My Model

# 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)

My View

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

Answers (3)

redhatvicky
redhatvicky

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

Umair Mohammad
Umair Mohammad

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

xyzone
xyzone

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

Related Questions