我正在使用 Django 进行 Tango,但无法解决这个练习。我收到django.db.utils.IntegrityError: UNIQUE constraint failed: rango_category.name错误。这是在我尝试实现对象views的属性之后Category。这是我的数据库填充脚本的摘录。我想也许我应该makemigrations然后migrate更新数据库模型。然而,这并没有帮助。
cats = {
'Python' : {'pages': python_pages, 'views':128},
'Django': {'pages': django_pages, 'views':128},
"Other Frameworks": {'pages':other_pages, 'views':128},
}
for cat, cat_data in cats.items():
c = add_cat(cat, cat_data['views'])
for p in cat_data["pages"]:
add_page(c, p['title'], p['url'])
for c in Category.objects.all():
for p in Page.objects.filter(category=c):
print("- {0} - {1}".format(str(c), str(p)))
def add_cat(name, views):
c = Category.objects.get_or_create(name=name, views=views)[0]
c.views=views
c.save()
return c
Run Code Online (Sandbox Code Playgroud)
添加Category模型:
class Category(models.Model):
name = models.CharField(max_length=128, unique=True)
views = models.IntegerField(default=0)
class Meta:
verbose_name_plural = 'Categories'
def __str__(self):
return self.name
Run Code Online (Sandbox Code Playgroud)
您收到错误是因为unique = Truein意味着如果您尝试保存具有相同值的新实例,name = models.CharField(max_length=128, unique=True)Django 将引发约束错误UNIQUE 约束失败name;违反唯一约束
get_or_create不起作用,因为views=views即使name等于,也可能不同name
当您create或get您的实例时,您可以仅使用该name字段来执行此操作
def add_cat(name, views):
c = Category.objects.get_or_create(name=name, views=views)[0]
c.views=views
c.save()
return cRun Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8475 次 |
| 最近记录: |