I'm using Django Rest Framework. Here is model:
class TimeSlot(models.Model):
    date_start = models.DateTimeField(default=None, null=True, blank=True)
    booked = models.BooleanField(default=False)
    user = models.ForeignKey(User, related_name='time_slots', on_delete=models.SET_NULL, default=None)
Here is my serializer:
class CreateBookingSerializer(serializers.ModelSerializer):
    class Meta:
        model = TimeSlot
        fields = ('id','booked','user',)
        extra_kwargs = {'booked': {'required': True}}
Here is my view:
class CreateBookingViewSet(viewsets.ModelViewSet):
    queryset = TimeSlot.objects.all()
    serializer_class = CreateBookingSerializer
    http_method_names = ['put']
    def perform_update(self, serializer):
        if (self.request.data['booked'] == 1):
            serializer.save(user=self.request.user, booked=True)
I want to set booked to true only if the current value is False. 
I'm using PUT method. so my url is /create_booking/id/
If I could get the id in my view, I would check the current booked value! How to get the id?
You can try to use self.kwargs['id'].
class CreateBookingViewSet(viewsets.ModelViewSet):
    queryset = TimeSlot.objects.all()
    serializer_class = CreateBookingSerializer
    http_method_names = ['put']
    def perform_update(self, serializer):
        id = self.kwargs['id']
        if (self.request.data['booked'] == 1):
            serializer.save(user=self.request.user, booked=True)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With