我希望创建一个使用slug
访问用户个人资料的网址。 IE浏览器。我想访问/profile/myname
以显示我的用户个人资料。我遇到的困难是为用户模型实现slug
字段。
此外,不确定这是否重要但我已经创建了UserProfile
模型,该模型扩展了标准User
模型,如下所示:
from django.contrib.auth.models import User
from autoslug import AutoSlugField
class UserProfile(models.Model):
user = models.ForeignKey(User, related_name='profile_name')
about_me = models.TextField(null=True, blank=True)
slug = AutoSlugField(populate_from='User.username', default='', unique=True)
给出错误(尝试迁移时):
DETAIL: Key (slug)=() is duplicated.
我认为网址是正确的,但已将其包含在参考资料中(在名为个人资料的应用中):
url(r'^(?P<slug>[\w-]+)', views.detail, name='detail')
答案 0 :(得分:3)
这意味着您已在userprofile
表中有一些记录slug
字段中包含空/空值。由于您已将该字段标记为unique=True
,因此它只能包含一个空值字段。为了避免这个错误,在slug字段中删除空值的记录,或者只为它们分配一个独特的slug,你就可以了。
正如您从上面可以理解的那样,在default=''
的字段中使用unique=True
将无效。唯一表示唯一,即使''
为空值,也会被视为唯一值,如果您有unique=True
,则只能在一行中使用。这也意味着您不能在唯一字段中拥有任何默认值。