django用户模型和自定义主键字段

And*_*rew 9 python django

Django默认在名为" id"的每个模型上创建一个主键字段,其类型为AutoField.在我的模型上,我UUIDField通过使用" primary_key"属性来覆盖它以使用自定义作为主键.我还希望User模型中django.contrib.auth有一个UUIDField作为主键,但如果不更改User模型源代码,这似乎是不可能的.

有没有推荐的方法来解决这个问题?

Man*_*dan 7

如果不更改用户模型源代码,这似乎是不可能的.

正确.除非你愿意改变(或替换)User,否则没有办法.

一种(脆弱的,hackish)这样做的方法是UserProfile为每个User实例附加一个.每个User应该只有一个 UserProfile.然后,您可以将您添加UUIDField到个人资料中.您仍然需要进行自定义查询才能转换UUIDFieldid.

如果您不喜欢这个名字UserProfile,可以适当地重命名.关键是你有一对一的关系User.


Sov*_*iut 6

在Django 1.5版本中,身份验证后端现在支持自定义用户模型:

https://docs.djangoproject.com/en/dev/topics/auth/customizing/#substituting-a-custom-user-model

电子邮件字段可用作用户名字段,并且可以在其上设置primary_key参数:

class CustomUser(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(max_length=254, unique=True, db_index=True, primary_key=True)

    USERNAME_FIELD = 'email'
Run Code Online (Sandbox Code Playgroud)


Rag*_*m S 5

人们可以仅利用AbstractUser并进行以下更改

class CustomUser(AbstractUser):
    email = models.EmailField(max_length=254, unique=True, db_index=True, primary_key=True)
    name = models.CharField(max_length=50)

    USERNAME_FIELD = 'email'
    REQUIRED_FILEDS = ['name']
Run Code Online (Sandbox Code Playgroud)