没有唯一一起验证的 Django Rest Framework 模型序列化程序
Posted
技术标签:
【中文标题】没有唯一一起验证的 Django Rest Framework 模型序列化程序【英文标题】:Django Rest Framework model serializer with out unique together validation 【发布时间】:2018-02-10 10:52:56 【问题描述】:我有一个带有一些字段的模型和一个unique together
:
....
class Meta(object):
unique_together = ('device_identifier', 'device_platform',)
显然,通过这种方式,关于 Django REST 框架序列化程序,当我尝试使用相同的 device_identifier
和 device_platform
进行 PUT 时出现错误(如果已经存在包含此数据的条目)。
"non_field_errors": [
"The fields device_identifier, device_platform must make a unique set."
]
是否可以在我的模型序列化程序中禁用此验证? 因为我需要在保存模型步骤期间管理这种情况(对我来说,在序列化程序验证中这不是错误)
【问题讨论】:
【参考方案1】: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 []
【讨论】:
【参考方案2】:您需要从序列化程序的列表中删除验证器。
虽然不完全一样,但步骤说明here
【讨论】:
以上是关于没有唯一一起验证的 Django Rest Framework 模型序列化程序的主要内容,如果未能解决你的问题,请参考以下文章
Django Rest Framework + React - 令牌与会话身份验证
如何使 Django REST JWT 身份验证与多个 Web 服务器一起扩展?
Django REST 验证器。多个用户可以拥有相同值的记录,但该记录对于每个用户都是唯一的,如何做到这一点?
运行时单元测试 Django Rest Framework 身份验证