Django Rest Framework 模型序列化器没有唯一的共同验证

标签 django python-2.7 serialization django-rest-framework unique

我有一个包含一些字段和唯一的模型:

....
class Meta(object):
    unique_together = ('device_identifier', 'device_platform',)

显然,通过这种方式,关于 Django Rest Framework 序列化器,当我尝试使用相同的 device_identifierdevice_platform (如果已经存在)进行 PUT 时,我会收到错误包含此数据的条目)。

{
  "non_field_errors": [
    "The fields device_identifier, device_platform must make a unique set."
  ]
}

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

最佳答案

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

class ExampleSerializer(serializers.ModelSerializer):
    class Meta:
        validators = []

请注意,这也会删除其他 unique-check validators应用于模型,这可能不是最好的主意。为了避免这种情况,只需重写序列化器上的 get_unique_together_validators 方法,以确保仅删除唯一在一起检查。

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

关于Django Rest Framework 模型序列化器没有唯一的共同验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45999131/

相关文章:

php - 为什么我不应该将序列化数组插入到我的数据库字段中?

python - 使用大型列表优化 Django 查询集调用?

python - Django ORM,如何使用 values() 并仍然使用 choicefield?

python - Tastypie api 与 postman 一起使用,但不与 python 请求一起使用

python - 从 utils 导入 label_map_util 导入错误 : No module named utils

c++ - boost 序列化: Transition from versioned class to object_serializable

C++ 添加用于序列化 vector 对的自定义 XML 标记

django - 在 django 应用程序上使用 django-storages 时,如何为存储在亚马逊 s3 上的图像获取 304?

python-2.7 - 如何使用 Python 2.7 将 shell 命令行输出放到 Ubuntu 上的变量中

Python 单元测试和测试发现