gpt4 book ai didi

django - Django REST Framework ModelSerializer的get_or_create功能

转载 作者:行者123 更新时间:2023-12-03 21:08:15 25 4
gpt4 key购买 nike

当我尝试将一些数据反序列化到对象中时,如果我包含一个唯一字段并为其提供已分配给数据库中对象的值,则会收到关键约束错误。这很有意义,因为它试图创建具有唯一值的对象,该对象已经在使用中。

有没有办法为ModelSerializer提供get_or_create功能类型?我希望能够为Serializer提供一些数据,如果存在具有给定唯一字段的对象,则只需返回该对象。

最佳答案

以我的经验,nmgeek的解决方案无法在DRF 3+中使用,因为serializer.is_valid()正确遵守了模型的unique_together约束。您可以通过删除UniqueTogetherValidator并覆盖序列化程序的create方法来解决此问题。

class MyModelSerializer(serializers.ModelSerializer):

def run_validators(self, value):
for validator in self.validators:
if isinstance(validator, validators.UniqueTogetherValidator):
self.validators.remove(validator)
super(MyModelSerializer, self).run_validators(value)

def create(self, validated_data):
instance, _ = models.MyModel.objects.get_or_create(**validated_data)
return instance

class Meta:
model = models.MyModel

关于django - Django REST Framework ModelSerializer的get_or_create功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25026034/

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