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用户注册