Python 如何在Django REST框架中进行条件验证?
如何通过验证方法检查数据输入的正确性 比如说我想给主人登记一个人。如果他此时已经有人,则无法注册。如何通过Python 如何在Django REST框架中进行条件验证?,python,django,api,django-rest-framework,Python,Django,Api,Django Rest Framework,如何通过验证方法检查数据输入的正确性 比如说我想给主人登记一个人。如果他此时已经有人,则无法注册。如何通过def validate\u work\u on(self,value)实现这一点: 序列化程序: class SerializerCreateServiceCreate(serializers.ModelSerializer): work_on = serializers.models.CharField(choices=Service.worked_hours) time_to_work
def validate\u work\u 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 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
如何针对这种情况进行验证?您需要重写序列化程序的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()
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()