models.Model的角色
首先,Django中最基本的模型类是 models.Model
。所有Django模型都是继承 models.Model
来定义的。这个类将我定义的模型映射到数据库表中。每个模型类是数据库的 表,其中的字段则是表的 列(columns)。
重要的一点是,通过继承 models.Model
,可以提供多种有用的方法:
save()
:将对象保存到数据库的方法delete()
:删除对象的方法objects.create()
:创建并保存新对象的方法objects.filter()
:查询满足特定条件的对象的方法
得益于这些功能,只需继承 models.Model
,就可以轻松使用Django ORM的强大功能。
AbstractUser与CustomUser的关系
Django中有一个内置的用户模型 auth.User
。虽然可以直接使用这个模型,但大多数情况下用户模型需要进行自定义。例如,有时我们可能想要添加电话号码或地址等额外字段。
在这种情况下使用的就是 AbstractUser
。这个类是一个抽象类,可以扩展Django提供的基本用户模型(即 auth.User
)。由于 AbstractUser
也继承了 models.Model
,因此当我继承 AbstractUser
定义 CustomUser
时,可以完整使用ORM的所有功能。
from django.contrib.auth.models import AbstractUser
from django.db import models
class CustomUser(AbstractUser):
phone_number = models.CharField(max_length=15, blank=True)
address = models.CharField(max_length=255, blank=True)
这样定义的 CustomUser
模型可以提供与用户认证相关的所有功能,同时可以自由定义附加字段。
models.Manager与AbstractUserManager的角色
在Django模型中,models.Manager
是处理数据库查询的接口。可以通过提供的 objects
管理器轻松查询或操作数据。例如,可以使用 filter()
、get()
、create()
等方法。
在需要用户创建逻辑时,用户模型可以利用 AbstractUserManager
。AbstractUserManager
继承自 models.Manager
,提供了专门用于用户创建的方法(create_user()
、create_superuser()
)。
from django.contrib.auth.models import BaseUserManager
class CustomUserManager(BaseUserManager):
def create_user(self, email, password=None, **extra_fields):
# 用户创建逻辑
pass
def create_superuser(self, email, password=None, **extra_fields):
# 超级用户创建逻辑
pass
通过自定义用户创建逻辑实现 CustomUserManager
,可以更灵活地管理用户模型。
总结:模型类之间的关系
到目前为止,我们整理了Django模型类之间的关系如下:
models.Model
:所有Django模型的基类。继承后映射到数据库,并提供ORM功能。AbstractUser
:继承自models.Model
的抽象类。扩展后定义CustomUser
。AbstractUserManager
:继承自models.Manager
,实现用户创建逻辑的自定义。
理解并利用这一结构,可以更有效地设计Django的模型系统。
댓글이 없습니다.