我正在尝试扩展用户模型并添加一些字段,以下是我的方法:
Class UserProfile(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
mobile_number = models.CharField(max_length=20)
gender = models.CharField(max_length=2, choices=GENDER_CHOICES)
location = models.ForeignKey(Location, blank=True, null=True)
class User_One(UserProfile):
field_1 = models.CharField(max_length=20)
....
....
class User_Two(UserProfile):
field_1 = models.CharField(max_length=20)
....
....
所以基本上有两种类型的用户
User_One
和User_Two
,现在每当我们将这两种类型的用户保存到数据库中时,就会发生以下情况
User
模型记录,User_One
模型记录,id 为 1,2,3User_Two
模型记录,id 为 1,2,3因此,对于每个模型记录保存,Django 或数据库都会生成 id 的 1,2,3。
但是我要求用户模型应该为 id 字段值生成
uuid
来代替整数,这可能吗?
我的意思是像下面这样
class User_Profile(models.Model):
id = models.IntegerField(default=uuid.uuid4)
使用 uuid 作为主键需要几个额外的步骤:
UUIDField
作为您的 id 字段,而不是 InegerField
,因为 uuid 不完全是整数primary_key=True
要获取自定义用户模型,请将其子类化为
django.contrib.auth.models.AbstractUser
并在设置中指定 AUTH_USER_MODEL
:
import uuid
from django.contrib.auth.models import AbstractUser
from django.db import models
class UserProfile(AbstractUser):
id = models.UUIDField(primary_key=True, default=uuid.uuid4)
然后在您的设置文件中:
AUTH_USER_MODEL = 'youruserapp.UserProfile'
在进行任何迁移(创建数据库)之前执行此操作很重要,否则这将不起作用。
这是一个老问题,但是关于如何扩展
AbstractUser
(或 AbstractBaseUser
)、更新模型、管理器等的非常好的资源可以在这里找到:https://testdriven.io/blog /django-自定义用户模型