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