Django Rest框架上的嵌套序列化程序的独特验证 [英] Unique validation on nested serializer on Django Rest Framework
问题描述
class GenreSerializer(serializers.ModelSerializer):
class Meta:
fields =('name',)#这个字段是唯一的
model =类型
class BookSerializer(serializers.ModelSerializer):
genre = GenreSerializer()
class Meta:
model = Book
fields =('name','genre')
def create(self,validated_data):
genre = validated_data.pop('genre')
genre = Genre.objects.get(** genre)
返回Book.objects.create(genre = genre,** validated_data)
问题:当我尝试保存像{name的json对象时: 王子,类型:{name:历史}} DRF尝试验证类型对象唯一约束,如果历史记录存在会引起异常,因为具有名称的类型历史必须是唯一的,这是真的,但我只是试图关联
谢谢你很多!!
您应该删除嵌套序列化程序的唯一验证器:
class GenreSerializer(serializers.ModelSerializer):
class Meta:
fields =('name',)#这个字段是唯一的
model =类型
extra_kwargs = {
'name':{'validators' :[]},
}
您可能希望打印您的序列化程序,以确保您没有在该字段上的其他验证器。如果你有一些,你必须将它们包括在列表中。
I have a case like this, where you have a custom nested serializer relation with a unique field. Sample case:
class GenreSerializer(serializers.ModelSerializer):
class Meta:
fields = ('name',) #This field is unique
model = Genre
class BookSerializer(serializers.ModelSerializer):
genre = GenreSerializer()
class Meta:
model = Book
fields = ('name', 'genre')
def create(self, validated_data):
genre = validated_data.pop('genre')
genre = Genre.objects.get(**genre)
return Book.objects.create(genre=genre, **validated_data)
The problem: When i try to save a json object like {"name":"The Prince", "genre": {"name": "History"}} DRF try to validate the genre object unique constraint and if "History" exists throw me an exception because a genre with name "History" must be unique, and that's true but i just trying to relate the object and not create together.
Thank you a lot!!
You should drop the unique validator for the nested serializer:
class GenreSerializer(serializers.ModelSerializer):
class Meta:
fields = ('name',) #This field is unique
model = Genre
extra_kwargs = {
'name': {'validators': []},
}
You may want to print your serializer before to make sure you don't have other validators on that field. If you have some, you'll have to include them in the list.
这篇关于Django Rest框架上的嵌套序列化程序的独特验证的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!