Проверьте текущие значения экземпляра при выполнении execute_update в структуре отдыха django - PullRequest
0 голосов
/ 11 февраля 2019

Я использую 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)

Я хочу установить для booked значение true, только если текущее значение равно False.Я использую метод PUT.так что мой URL-адрес /create_booking/id/

Если бы я мог получить id на мой взгляд, я бы проверил текущее значение booked!Как получить id?

1 Ответ

0 голосов
/ 11 февраля 2019

Вы можете попробовать использовать 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)
...