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

时间:2010-09-04 08:35:06

标签: python django

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

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

3 个答案:

答案 0 :(得分:7)

  

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

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

执行此操作的一种(脆弱的,hackish)方法是为每个UserProfile实例附加User。每个User应该完全一个 UserProfile。然后,您可以将UUIDField添加到个人资料中。您仍然需要执行自定义查询才能从UUIDField转换为id

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

答案 1 :(得分: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'

答案 2 :(得分:2)

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