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

How Do I access Object and serializer Value in same Validate function?

我有以下型号

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)

并且预订模式是 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
    )

如果旅行类型是 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_id,如果它是空的 将引发验证错误 我不知道我该如何继续 value.trip_type 给我 R 但我无法将其与 returnid.

如果你想根据另一个值验证一个参数的值,你可以在 validate 方法中进行。

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

使用 TextChoices 而不是元组的奖励积分。