Django用户资料的slug字段

3
我想创建一个使用“slug”访问用户配置文件的URL。即,我想访问/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是正确的,但为了参考而包含在一个名为profile的应用程序中:

url(r'^(?P<slug>[\w-]+)', views.detail, name='detail')

你是否已经有了UserProfile的现有迁移?如果是这样,请展示它。并提供您尝试迁移的命令行命令。 - schacki
1个回答

3
这意味着您的userprofile表中已经存在一些记录,其slug字段为空/为null。因为您将该字段标记为unique=True,所以只能有一个空值字段。为避免此错误,请删除slug字段中空值的记录,或者为它们分配唯一的slug,这样就可以解决问题了。
同时,从上面可以理解到,在一个具有unique=True的字段中使用default=''是行不通的。唯一意味着唯一,即使''作为空值也被视为唯一值,并且如果您设置了unique=True,则只能在一行中使用。这也意味着您不能在唯一字段中设置任何默认值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接