【问题标题】:Django: templates don't see custom user fieldsDjango:模板看不到自定义用户字段
【发布时间】:2014-08-16 18:51:57
【问题描述】:

我在 Django 1.6 中有一个自定义的 User 模型:

from django.contrib.auth import models as usermodels

class User(usermodels.User):
    sid = models.CharField(max_length=20, unique=True)
    slug = models.SlugField(default="slug")

    objects = usermodels.UserManager()

在我的一个模板中,我有以下内容:

Welcome, {{ user.username }}: {{ user.sid }}

如果用户已通过身份验证,则仅显示为,例如,如果用户名是 C​​hris,则显示为“Chris:”。自定义字段sid 未显示!我检查了我的表格,并且用户确实存储了sid。模板似乎没有获取我的自定义字段!

我已将我的自定义模型作为CUSTOM_USER_MODEL 添加到我的设置中。

【问题讨论】:

  • 你不应该从 auth.User 继承,而应该从 auth.BaseUser 继承。这样做不是您的实际问题,但在获取数据时会引入不必要的 db 调用。
  • 您的意思是AbstractBaseUser 还是AbstractUser?我在 django.auth.models 的任何地方都找不到 BaseUser。
  • 我扩展了AbstractUser 而不是User,并在我的设置中设置AUTH_USER_MODEL 而不是CUSTOM_USER_MODEL。成功了!

标签: python django django-users


【解决方案1】:

您应该在settings.py 中使用AUTH_USER_MODEL 设置自定义用户模型,如docs 中指定的那样,而不是CUSTOM_USER_MODEL

【讨论】:

  • 这给出了一个错误:myapp.user: 'user_ptr' defines a relation with the model 'auth.User', which has been swapped out. Update the relation to point at settings.AUTH_USER_MODEL. 我环顾四周,但找不到解决方案。
  • 我正在使用 django.contrib.auth.get_user_model() 来引用用户模型,但在我使用文档中指定的 settings.AUTH_USER_MODEL 的外键中除外。
  • 我不完全确定该错误来自何处,但可以尝试对AbstractUser 进行子类化,如docs 中所述。它似乎更适合您的用例。
  • 这两件事一起解决了这个问题。谢谢!
猜你喜欢
  • 2021-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-08
  • 2017-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多