Python django:防止序列化程序上的UniqueTogetherValidator
我对django有点问题。我使用以下字段创建了我的模型:Python django:防止序列化程序上的UniqueTogetherValidator,python,django,api,django-validation,Python,Django,Api,Django Validation,我对django有点问题。我使用以下字段创建了我的模型: class MyModel(Model): field1 = models.IntegerField() field2 = models.CharField(max_length=200) field3 = models.IntegerField() class Meta: unique_together = (('field1', 'field2')) 我有一个API路由,它链接到一个
class MyModel(Model):
field1 = models.IntegerField()
field2 = models.CharField(max_length=200)
field3 = models.IntegerField()
class Meta:
unique_together = (('field1', 'field2'))
我有一个API路由,它链接到一个模型序列化程序:
class MyModelSerializer(ModelSerializer):
class Meta:
model = models.MyModel
问题是,当我通过API发送对象来更新它们时,序列化程序会引发{'non_field_errors':['fields field1,field2必须创建唯一的集。]}
有人知道如何防止在序列化程序上使用UniqueTogetherValidator吗?这是基于
djangorestframework==3.8.2
。
覆盖ModelSerializer
上的get\u validators
方法,并注释掉将unique\u validators集成到一起的调用,如果这是您真正关心忽略的唯一验证器。否则,这个答案建议只将验证器设置为空列表,以关闭该序列化程序的所有验证
class MyModelSerializer(ModelSerializer):
def get_validators(self):
"""
Determine the set of validators to use when instantiating serializer.
"""
# If the validators have been declared explicitly then use that.
validators = getattr(getattr(self, 'Meta', None), 'validators', None)
if validators is not None:
return validators[:]
# Otherwise use the default set of validators.
return (
# self.get_unique_together_validators() +
self.get_unique_for_date_validators()
)
class Meta:
model = models.MyModel
这是基于djangorestframework==3.8.2
。
覆盖ModelSerializer
上的get\u validators
方法,并注释掉将unique\u validators集成到一起的调用,如果这是您真正关心忽略的唯一验证器。否则,这个答案建议只将验证器设置为空列表,以关闭该序列化程序的所有验证
class MyModelSerializer(ModelSerializer):
def get_validators(self):
"""
Determine the set of validators to use when instantiating serializer.
"""
# If the validators have been declared explicitly then use that.
validators = getattr(getattr(self, 'Meta', None), 'validators', None)
if validators is not None:
return validators[:]
# Otherwise use the default set of validators.
return (
# self.get_unique_together_validators() +
self.get_unique_for_date_validators()
)
class Meta:
model = models.MyModel
此错误适用于您发送的所有数据还是仅适用于一组数据?看起来数据没有遵守唯一约束。更重要的是,unique_-together=('field1','field2')
应该是这样的,没有双括号,我正在发送一个包含6-24个对象的列表,而我;我得到了他们每个人的错误。当我从数据库中删除以前具有这些属性的对象时,请求成功。我尝试删除双括号,错误仍然存在每次完成请求时,如果您计划再次为另一个请求使用完全相同的数据,则需要运行python manage.py flush
来清理数据库。否则,您将有一个唯一的约束冲突。@MosesKoledoye I unerstand。但是,我正在从一个在线界面更新对象,我所需要的只是在序列化程序之后获取它们,这样我就可以使用get\u或\u create
来更新/创建它们,但我从未到达它,因为序列化程序使用UniqueTogetherValidator
…尝试序列化程序。是否有效(raise\u exception=False)
如图所示,此错误适用于您发送的所有数据还是仅适用于一组数据?看起来数据没有遵守唯一约束。更重要的是,unique_-together=('field1','field2')
应该是这样的,没有双括号,我正在发送一个包含6-24个对象的列表,而我;我得到了他们每个人的错误。当我从数据库中删除以前具有这些属性的对象时,请求成功。我尝试删除双括号,错误仍然存在每次完成请求时,如果您计划再次为另一个请求使用完全相同的数据,则需要运行python manage.py flush
来清理数据库。否则,您将有一个唯一的约束冲突。@MosesKoledoye I unerstand。然而,我正在从一个在线界面更新对象,我所需要的只是在序列化程序之后获取它们,这样我就可以使用get\u或\u create
来更新/创建它们,但我从未到达它,因为序列化程序使用UniqueTogetherValidator
…尝试序列化程序。如图所示,是否有效(raise\u exception=False)