gpt4 book ai didi

python - Django Rest Framework 中嵌套序列化程序的唯一验证

转载 作者:太空狗 更新时间:2023-10-29 18:20:54 24 4
gpt4 key购买 nike

我有一个这样的案例,您有一个带有唯一字段的自定义嵌套序列化器关系。示例案例:

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)

问题: 当我尝试保存像 {"name":"The Prince", "genre": {"name": "History"}} 这样的 json 对象时,DRF 尝试验证流派对象唯一约束,如果 “历史” 存在,则会抛出一个异常,因为名称为 “历史” 的流派必须是唯一的,这是真的,但我只是想联系起来对象而不是一起创建。

非常感谢!!

最佳答案

您应该删除嵌套序列化程序的唯一验证器:

class GenreSerializer(serializers.ModelSerializer):

class Meta:
fields = ('name',) #This field is unique
model = Genre
extra_kwargs = {
'name': {'validators': []},
}

您可能希望在之前打印您的序列化器,以确保您在该字段上没有其他验证器。如果您有一些,则必须将它们包括在列表中。

编辑:如果需要确保创建的唯一性约束,则应在调用 serializer.is_valid 之后和 serializer.save 之前在 View 中进行.

关于python - Django Rest Framework 中嵌套序列化程序的唯一验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38438167/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com