我正在使用Django Rest Framework。 这是模型:
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)
这是我的序列化器:
class CreateBookingSerializer(serializers.ModelSerializer):
class Meta:
model = TimeSlot
fields = ('id','booked','user',)
extra_kwargs = {'booked': {'required': True}}
这是我的视图:
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)
仅当当前值为False时,我才希望将booked设置为true。
我正在使用PUT方法。所以我的网址是/create_booking/id/
如果我可以看到id
,我将检查当前的booked
值!如何获得id
?
答案 0 :(得分:2)
您可以尝试使用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)