在Django框架中,开发人员有时需要扩展默认的User模型以满足特定的业务需求,比如增加用户的昵称、生日、地址等字段。本篇将详细介绍如何在Django中继承内置的`User`模型并进行重写,以创建一个包含更多用户信息的自定义模型。
我们需要导入Django的`AbstractUser`类。`AbstractUser`是Django提供的一种方式,允许我们在不修改Django内置`User`模型的情况下扩展其功能。在`models.py`文件中,引入`AbstractUser`:
```python
from django.contrib.auth.models import AbstractUser
```
然后,定义一个新的模型类,继承自`AbstractUser`。在这个例子中,我们将创建一个名为`UsersModels`的类:
```python
class UsersModels(AbstractUser):
nick_name = models.CharField(max_length=20, verbose_name='昵称')
birday = models.DateField(verbose_name='生日', null=True, blank=True)
address = models.CharField(max_length=50, verbose_name='地址', default='')
mobile = models.CharField(max_length=11, verbose_name='手机', default='')
image = models.ImageField(upload_to='images/%Y/%m', default='images/default.png', verbose_name='头像')
sex = models.CharField(max_length=10, default='', verbose_name='性别')
age = models.CharField(max_length=5, default='', verbose_name='年龄')
class Meta:
db_table = 'user'
verbose_name = '用户信息'
verbose_name_plural = verbose_name
```
在上述代码中,我们添加了几个新的字段,如`nick_name`、`birday`、`address`、`mobile`、`image`、`sex`和`age`。`verbose_name`属性用于在Django后台管理界面中显示更易读的字段名。
接下来,需要在项目的设置文件`settings.py`中配置自定义的用户模型。找到`AUTH_USER_MODEL`设置,并将其改为:
```python
AUTH_USER_MODEL = 'register.UsersModels' # register 是你的应用名称
```
确保`register`是你实际应用的名称,`UsersModels`是你的自定义用户模型类。
这里还提到了一些Django模型字段的其他特性:
1. `choices`:可以为字段设置枚举选项,例如`send_type`字段,限制用户只能从`('register', '注册邮件')`和`('forget', '找回密码')`中选择。
```python
send_type = models.CharField(choices=(('register', '注册邮件'), ('forget', '找回密码')), max_length=10, verbose_name='邮件类型')
```
2. `BooleanField`配合`choices`:`status`字段使用了`BooleanField`,并使用`choices`来定义两种状态,`True`表示已使用,`False`表示未使用。
```python
status = models.BooleanField(choices=((True, '已使用'), (False, '未使用')), verbose_name='邮件状态', default=False)
```
完成上述步骤后,Django将使用你的自定义用户模型`UsersModels`代替默认的`User`模型。现在,你可以使用这些新字段进行用户数据的操作和管理,同时在后台管理界面也能看到这些自定义字段。
通过这种方法,我们可以根据项目需求灵活地扩展Django的用户模型,增加更多的用户信息,提升系统的功能性和用户体验。这只是一个基础的例子,实际上你还可以添加更多的字段或者定制逻辑,以满足复杂的应用场景。