Python django:防止序列化程序上的UniqueTogetherValidator

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路由,它链接到一个

我对django有点问题。我使用以下字段创建了我的模型:

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)