我扩展了django内置用户模型。我目前正在使用django 1.10。
我正在尝试在模板中显示用户名,short_name。 注意:short_name是扩展字段
<span> {{ request.user.profile.username }} </span>
<span> {{ user.profile.username }} </span>
{{ user.get_username }}
{{ user.username }}
此模板标记不适用于django 1.10
我已使用此链接创建自定义用户模型https://simpleisbetterthancomplex.com/tutorial/2016/07/22/how-to-extend-django-user-model.html
使用这个我想显示基于角色的内容。
class UserProfile(models.Model):
user = models.ForeignKey(User, unique=True)
employee_name = models.CharField(max_length=50)
short_name = models.CharField(max_length=50)
access = (
('admin', 'admin'),
('director', 'director'),
('management', 'management'),
('employee', 'employee'),
)
access_control = models.CharField(max_length=50, choices=access)
YES_NO = (
('yes', 'Yes'),
('no', 'No'),
)
active = models.CharField(max_length=50, choices=YES_NO)
在设置中添加以下行:
AUTH_PROFILE_MODULE = "user_login.UserProfile"
TEMPLATE_CONTEXT_PROCESSORS = (
'django.core.context_processors.request',
"django.contrib.auth.context_processors.auth",
)
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates'), ],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
答案 0 :(得分:3)
如果您与ForeignKey
有user
的关系,如果您没有定义user.userprofile.short_name
,则可以通过related_name
访问它在您的字段中,您可以通过user.userprofile_set.first().short_name
获取,现在,您可以将关系类型更改为OneToOneField
并使用user.userprofile.short_name
,这样只能使用onetoone关系
答案 1 :(得分:1)
首先,从User到UserProfile的关系称为userprofile
。
其次,username
位于主用户模型上;您的额外字段称为short_name
。所以:
{{ user.userprofile.short_name }}
答案 2 :(得分:0)
用户名字段位于用户模型中,因此{{ request.user.profile.username }}
之类的内容应为{{ request.user.username }}
。您的配置文件模型称为UserProfile,您没有指定反向关系名称,因此默认情况下它将被称为userprofile
,因此{{ user.userprofile.short_name }}
,而不是{{ user.profile.short_name }}
。请记住,要使用模板中的任何对象,您需要在上下文中传递它。