如何在Django REST框架中进行条件验证?

2024-09-26 18:18:33 发布

您现在位置:Python中文网/ 问答频道 /正文

如何通过验证方法检查数据输入的正确性

比如说我想给主人登记一个人。如果他此时已经有人,则无法注册。如何通过def validate_work_on (self, value):实现这一点

序列化程序:

class SerializerCreateServiceCreate(serializers.ModelSerializer):
work_on = serializers.models.CharField(choices=Service.worked_hours)
time_to_work = {}

class Meta:
    model = Service
    fields = '__all__'
    read_only_fields = ('client_to_job',)

def create(self, validated_data):
    return Service.objects.create(
        name_master=validated_data.get('name_master'),
        client_to_job=self.context['request'].user,
        work_on=validated_data.get('work_on')
    )

**def validate_work_on(self, value):
    if value in Service.worked_hours:
        raise serializers.ValidationError("выберите другое время")
    return value**
class SerializerServiceCreate(SerializerCreateServiceCreate):
    name_master = SerializerMasters()
    client_to_job = UserSerializerView()

模型Service

class Service(models.Model):
worked_hours = (
    ('1', '10:00'),
    ('2', '11:00'),
    ('3', '12:00'),
    ('4', '13:00'),
    ('5', '14:00'),
    ('6', '15:00'),
    ('7', '16:00'),
    ('8', '17:00'),
    ('9', '18:00'),
    ('10', '19:00'),
    ('11', '20:00'),
)

name_master = models.ForeignKey(Masters, verbose_name='Мастер', on_delete=models.CASCADE)
client_to_job = models.ForeignKey(User, verbose_name='Клиент', on_delete=models.CASCADE)
work_on = models.CharField(verbose_name='Рабочие часы', choices=worked_hours, max_length=30)

class Meta:
    verbose_name = 'Сервис'
    verbose_name_plural = 'Сервисы'

和类API视图:

class ServiceCreateView(CreateAPIView):
permission_classes = [IsAuthenticated]
serializer_class = SerializerCreateServiceCreate

def get_object(self):
    return self.request.user

如何针对这种情况进行验证


Tags: tonameselfclientverbosevalueonmodels
1条回答
网友
1楼 · 发布于 2024-09-26 18:18:33

您需要重写序列化程序的save_object(obj)方法

class SerializerCreateServiceCreate(serializers.ModelSerializer):
    work_on = serializers.models.CharField(choices=Service.worked_hours)
    time_to_work = {}

    def save_object(self, obj):
        ###do whatever you want###
        obj.save()

相关问题 更多 >

    热门问题