Python中的models.User:自定义用户模型示例
发布时间:2024-01-14 08:12:26
在Django中,可以使用自定义的用户模型来代替默认的User模型。这对于需要扩展用户属性或者将其他字段添加到用户模型中的项目非常有用。
首先,需要在models.py中创建一个名为User的模型,并继承自AbstractUser。这将使我们能够继承并扩展默认的User模型。
from django.contrib.auth.models import AbstractUser
from django.db import models
class User(AbstractUser):
# 添加自定义字段
age = models.PositiveIntegerField(null=True, blank=True)
profile_picture = models.ImageField(upload_to='profile_pictures', null=True, blank=True)
在这个示例中,我们添加了一个名为age的PositiveIntegerField(正整数字段)和一个名为profile_picture的ImageField(图片字段)。这两个字段都可以为空。
接下来,需要告诉Django在设置中使用新的用户模型。在settings.py中,找到AUTH_USER_MODEL设置,并将其设置为自定义用户模型的应用和模型名称。
AUTH_USER_MODEL = 'myapp.User'
然后,需要运行migrate命令来更新数据库,并在数据库中创建新的用户模型表。
python manage.py makemigrations python manage.py migrate
现在,我们可以像使用默认的User模型一样使用自定义的User模型。可以使用from django.contrib.auth import get_user_model导入自定义用户模型,然后通过get_user_model()获取用户模型。
from django.contrib.auth import get_user_model User = get_user_model()
然后,我们可以像使用默认User模型一样使用自定义User模型。例如,可以使用User.objects.create_user创建一个用户:
User.objects.create_user(username='john', password='secret', email='john@example.com', age=25)
我们也可以使用User.objects.filter查询用户。
users = User.objects.filter(age__gt=18)
总结:
在Django中自定义用户模型非常简单。通过继承AbstractUser,并在其中添加自定义字段,可以轻松地扩展用户模型。然后,使用get_user_model()来获取用户模型,并像使用默认的User模型一样使用它。
