Django Rest Framework模型序列化器与独特的一起验证

Saf*_*ari 6 django serialization unique python-2.7 django-rest-framework

我有一个带有一些字段的模型和一个unique together:

....
class Meta(object):
    unique_together = ('device_identifier', 'device_platform',)
Run Code Online (Sandbox Code Playgroud)

显然,这样一来,关于Django的REST框架序列化,我得到一个错误,当我试图让具有相同的PUT device_identifierdevice_platform(如果已经存在与此数据条目).

{
  "non_field_errors": [
    "The fields device_identifier, device_platform must make a unique set."
  ]
}
Run Code Online (Sandbox Code Playgroud)

可以在我的模型序列化器中禁用此验证吗?因为我需要在保存模型步骤期间管理这种情况(对我来说,在序列化器验证中这不是错误)

arj*_*n27 12

Django REST框架应用于UniqueTogetherValidator序列化程序.您可以通过覆盖validators序列化程序定义中的字段来删除它.

class ExampleSerializer(serializers.ModelSerializer):
    class Meta:
        validators = []
Run Code Online (Sandbox Code Playgroud)

请注意,这也会删除应用于模型的其他唯一检查验证程序,这可能不是最好的主意.为避免这种情况,只需覆盖get_unique_together_validators序列化程序上的方法,以确保仅删除唯一一起检查.

class ExampleSerializer(serializers.ModelSerializer):
    def get_unique_together_validators(self):
        """Overriding method to disable unique together checks"""
        return []
Run Code Online (Sandbox Code Playgroud)


Lin*_*via 1

您需要从序列化器列表中删除验证器。

虽然不完全相同,但步骤解释如下