Ign*_*vro 11 python django rest django-serializer django-rest-framework
我有这样的情况,你有一个自定义嵌套序列化器关系与唯一字段.样例:
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)
Run Code Online (Sandbox Code Playgroud)
问题:当我尝试保存json对象如{"name":"The Prince","genre":{"name":"History"}} DRF尝试验证流派对象的唯一约束以及"History" exists抛出一个例外,因为一个名为"History"的类型必须是唯一的,这是真的,但我只是试图关联对象而不是一起创建.
非常感谢!!
Lin*_*via 18
您应该删除嵌套序列化程序的唯一验证器:
class GenreSerializer(serializers.ModelSerializer):
class Meta:
fields = ('name',) #This field is unique
model = Genre
extra_kwargs = {
'name': {'validators': []},
}
Run Code Online (Sandbox Code Playgroud)
您可能需要先打印序列化程序,以确保该字段上没有其他验证器.如果你有一些,你必须将它们包括在列表中.
编辑:如果您需要确保创建的唯一性约束,您应该在serializer.is_valid
调用之后和之前的视图中执行此操作serializer.save
.
归档时间: |
|
查看次数: |
4303 次 |
最近记录: |