繁体   English   中英

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

[英]django user model and custom primary key field

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

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

随着 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'

如果不更改 User 模型源代码,这似乎是不可能的。

正确。 除非您愿意更改(或替换) User ,否则没有办法。

一种(脆弱的,hackish)方法是为每个User实例附加一个UserProfile 每个User应该只有一个UserProfile 然后,您可以将您的UUIDField添加到配置文件中。 您仍然需要进行自定义查询才能将UUIDFieldid

如果您不喜欢UserProfile名称,您可以适当地重命名它。 关键是你与User一对一的关系。

可以仅利用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']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM