【发布时间】:2015-10-08 11:35:16
【问题描述】:
我的一个视图的任务是在我的数据库中插入几个值。我的印象是,如果我用独特的vendor_names 设置我的模型:
class Page(models.Model):
vendor_name = models.CharField(max_length=128, unique=True)
website = models.CharField(max_length=128)
food_type = models.CharField(max_length=128)
img_url = models.CharField(max_length=128)
如果我这样做了:
for vendor in vendors:
c = Page(vendor_name=vendor["name"],
website=vendor["link"],
food_type=vendor["type"],
img_url=vendor["imageurl"])
c.save()
将跳过重复的外观,我将在数据库中只有一个副本。至少这是我从here 了解到的。而不是这个,我必须添加一个 if 语句来检查我的数据库中的每个条目并查看它当前是否在那里,如果它没有插入,否则跳过。或者我在这里错过了什么?唯一约束的目的是什么?是否只是在有重复时抛出错误?我可以利用这个来代替吗?
我得到的错误是
Exception Value: duplicate key value violates unique constraint...
【问题讨论】:
-
根据文档:
If True, this field must be unique throughout the table. This is enforced at the database level and by model validation. If you try to save a model with a duplicate value in a unique field, a django.db.IntegrityError will be raised by the model’s save() method. -
为什么不使用外键,因为似乎有一个 Vendor 模型
-
所以是的,它应该不会重复。您是否有未应用的迁移?
-
@AndréFratelli 我最近的迁移已被应用。我得到一个错误。见上文。
-
@Pynchia 没有供应商模型,但你能解释一下使用外键对我有什么帮助吗?供应商来自一个对象数组。
标签: python django postgresql