Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在同一验证函数中访问对象和序列化程序值?_Python_Django_Django Rest Framework_Django Serializer - Fatal编程技术网

Python 如何在同一验证函数中访问对象和序列化程序值?

Python 如何在同一验证函数中访问对象和序列化程序值?,python,django,django-rest-framework,django-serializer,Python,Django,Django Rest Framework,Django Serializer,我有下面的型号 class Search(models.Model): trip_choice = ( ('O', 'One way'), ('R', 'return') ) booking_id = models.IntegerField(db_index=True, unique=True) trip_type = models.CharField(max_length=20, choices=trip_choice) 预订Mo

我有下面的型号

class Search(models.Model):
   trip_choice = (
        ('O', 'One way'),
        ('R', 'return')
    )
    booking_id = models.IntegerField(db_index=True, unique=True)
    trip_type = models.CharField(max_length=20, choices=trip_choice)
预订Moddel是带有搜索功能的Fk

class Booking(models.Model)
    flight_search = models.ForeignKey(Search, on_delete=models.CASCADE)
    flight_id = models.CharField(
        max_length=100
    )
    return_id = models.CharField(
        max_length=100,
        blank=True,
        null=True
    )
我有以下规则,如果trip类型是Return'R',则在序列化程序中不能发送空的Return id

class AddBookSerializer(BookSerializer):
    class Meta(BookSerializer.Meta):
        fields = (
            'flight_search',
            'flight_id',
            'return_id',
        )

    def validate_flight_search(self, value):
         print(value.trip_type)

我想访问并检查return\u id,如果它是空的,则会引发验证错误。我不知道如何作为
值继续。trip\u type
给我R,但我无法将其与return id进行比较。

如果要基于另一个值验证一个参数的值,可以在方法中进行验证


使用
文本选择
而不是元组的额外积分。

行程类型不在序列化中。我想您可能从
BookSerializer
获得它。不管怎样,你能帮我解决这个问题吗
class AddBookSerializer(serializers.ModelSerializer):
    def validate(self, attrs):
        trip_type = attrs['flight_search'].trip_type
        return_id = attrs.get('return_id', None)
        if trip_type == 'R' and not return_id:
            raise serializers.ValidationError("blah")
        return attrs