【问题标题】:Passing field from extended user model to template in Django将字段从扩展用户模型传递到 Django 中的模板
【发布时间】: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_namepersonal_order_list_urlabbreviation_code,我可以检索first_namepersonal_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 访问它。
  • 如果您使用命名类的标准约定,您的代码将更具可读性。 LabUserLabUserInline。在 SO 上突出显示代码甚至看起来更好。 python.org/dev/peps/pep-0008/#class-names
  • 好建议

标签: python django django-models django-templates


【解决方案1】:

request.user.lab_user.personal_order_list_url

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-06
    • 2012-03-02
    • 2010-12-17
    • 2012-10-02
    • 2014-12-05
    • 2016-11-09
    • 1970-01-01
    相关资源
    最近更新 更多