我正在使用 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
Adding Category
model:
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
你收到错误是因为unique = True
in name = models.CharField(max_length=128, unique=True)
意味着 Django 将引发约束错误UNIQUE 约束失败如果您尝试使用相同的内容保存新实例name
价值;违反唯一约束
get_or_create
不起作用,因为views=views
这可能会有所不同,尽管name
equals name
当你create
or get
您的实例,您可以仅使用name
field
def add_cat(name, views):
c = Category.objects.get_or_create(name=name, views=views)[0]
c.views=views
c.save()
return c
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)