【发布时间】:2018-01-24 11:22:40
【问题描述】:
我在将字段从扩展用户模型传递到 Django 中的模板时遇到问题。
我在名为 user_management 的新应用中的模型中定义了扩展用户字段:
#user_management/models.py
from __future__ import unicode_literals
from django.db import models
from django.contrib.auth.models import User
class lab_user(models.Model):
user = models.OneToOneField(User)
personal_order_list_url = models.URLField("Personal order list URL", max_length=255, blank=False, unique=True)
abbreviation_code = models.CharField("Abbreviation code", max_length=3, blank=False, unique=True)
def save(self, force_insert=False, force_update=False):
self.personal_order_list_url = self.personal_order_list_url.lower()
self.abbreviation_code = self.abbreviation_code.upper()
super(lab_user, self).save(force_insert, force_update)
然后我在 admin.py 中注册了新字段:
#user_management/admin.py
from __future__ import unicode_literals
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from django.contrib.auth.models import User
from .models import lab_user
class lab_user_inline(admin.StackedInline):
model = lab_user
can_delete = False
verbose_name_plural = 'Additional Fields'
class UserAdmin(BaseUserAdmin):
inlines = (lab_user_inline, )
admin.site.unregister(User)
admin.site.register(User, UserAdmin)
我可以在“身份验证和授权”中看到新字段,我想这意味着我已经“正确”地完成了所有事情。
当我尝试使用{{ request.user.x }} 调用模板中的字段时,其中x 可能是first_name、personal_order_list_url 或abbreviation_code,我可以检索first_name 和personal_order_list_url 的所需值,但是不适用于abbreviation_code。
如果request.user.personal_order_list_url 有效,request.user.abbreviation_code 也应该有效,不是吗?
【问题讨论】:
-
您确定
request.user.personal_order_list_url有效吗?User没有那个属性。您应该使用request.user.lab_user.personal_order_list_url访问它。 -
如果您使用命名类的标准约定,您的代码将更具可读性。
LabUser和LabUserInline。在 SO 上突出显示代码甚至看起来更好。 python.org/dev/peps/pep-0008/#class-names -
好建议
标签: python django django-models django-templates