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