【发布时间】:2019-11-22 15:13:29
【问题描述】:
所以,我在 django 文档的丛林中工作,以创建一个在线分类应用程序。 由于用户应该能够在线发布他们自己的分类,我需要使用用户身份验证系统。但是,他们需要能够通过电子邮件而不是用户名登录,这就是为什么我需要提出一个定制的用户模型。
现在,django 文档中包含的示例演练似乎很有帮助:
https://docs.djangoproject.com/en/1.11/topics/auth/customizing/#a-full-example
为了更好地理解django,我试着逐行浏览示例,有一点我不太明白:
class MyUserManager(BaseUserManager):
def create_user(self, email, date_of_birth, password=None):
"""
Creates and saves a User with the given email, date of
birth and password.
"""
if not email:
raise ValueError('Users must have an email address')
user = self.model(
email=self.normalize_email(email),
date_of_birth=date_of_birth,
)
我不明白“self.model(...)”的来源。它是一种方法吗?我在 BaseUserManager 中找不到它......它在哪里定义?我什至不知道如何准确地表达这个问题,因为我对此感到非常困惑......有人可以告诉我我们在这里定义什么以及出于什么目的?它最初来自哪个 django 模型?
提前感谢您的支持!
【问题讨论】:
-
当您将
Manager对象添加到您的类时,它将在管理器对象中添加对模型对象的引用。这是通过元类逻辑完成的。 -
@WillemVanOnsem 我建议将其发布为答案。解释那里发生的一些魔法。