【发布时间】:2016-09-08 01:56:39
【问题描述】:
我在使用 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': ['The fields field1, field2 must make a unique set.']}
有谁知道如何防止UniqueTogetherValidator 在序列化程序上使用?
【问题讨论】:
-
此错误适用于您发送的所有数据还是仅适用于一组数据?它看起来更像是数据没有遵守唯一约束。更重要的是,
unique_together = ('field1', 'field2')应该看起来像这样,没有双括号 -
我正在发送一个包含 6-24 个对象的列表,并且我得到每个对象的错误。当我从数据库中删除具有这些属性的先前对象时,请求成功。我尝试删除双括号,错误仍然存在
-
每次完成请求时,如果您打算再次将完全相同的数据用于另一个请求,则需要运行
python manage.py flush来清理数据库。否则,您将违反唯一的约束。 -
@MosesKoledoye 我不明白。但是,我正在从在线界面更新对象,我只需要在序列化程序之后获取它们,这样我就可以使用
get_or_create来更新/创建它们,但我从来没有达到它,因为序列化程序使用@987654329 @... -
尝试
serializer.is_valid(raise_exception=False)如看到here
标签: python django api django-validation