Django UserProfile slug 字段

Posted

技术标签:

【中文标题】Django UserProfile slug 字段【英文标题】:Django UserProfile slug field 【发布时间】:2014-04-21 10:27:44 【问题描述】:

我正在寻找使用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.

我认为这些网址是正确的,但已将其包含在内以供参考(在名为 profile 的应用中):

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

【问题讨论】:

您的 UserProfile 是否已有迁移?如果有,请出示。并提供您尝试迁移的命令行命令。 【参考方案1】:

这意味着您已经在userprofile 表中有一些记录,slug 字段中的值为空/空值。因为您已将该字段标记为unique=True,所以它只能有一个值为空的字段。为避免此错误,请删除 slug 字段中具有空值的记录,或者只为它们分配一个唯一的 slug,然后就可以了。

正如您从上面所了解的,在具有unique=True 的字段中使用default='' 是行不通的。唯一意味着唯一,即使'' 作为空值也被认为是唯一值,如果您有unique=True,则可以仅在一行中使用。这也意味着您不能在唯一字段中使用任何默认值。

【讨论】:

以上是关于Django UserProfile slug 字段的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 中创建保存 User 和 UserProfile 对象的视图

Django:为啥要为 UserProfile 创建 OneToOne 而不是子类化 auth.User?

IntegrityError -userprofile.u_id 不能为NULL,django用户注册

在 Django 中扩展用户对象:用户模型继承还是使用 UserProfile?

django查询过滤

Django:使用重复的 slug 管理诸如 id:slug 之类的 url