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

9

Django默认为每个模型创建一个名为“id”的主键字段,类型为AutoField。在我的模型中,我通过使用“primary_key”属性将其覆盖为使用自定义的UUIDField作为主键。我也希望django.contrib.auth中的User模型具有UUIDField作为主键,但似乎除非更改User模型源代码,否则不可能实现。

是否有建议的方法来解决这个问题?

3个回答

10

1
请注意,当unique为True时,您不需要指定db_index,因为unique意味着创建索引。 - Jonatan

7

如果不更改用户模型源代码,似乎无法实现。

正确。除非你愿意更改(或替换)User,否则没有其他方法。

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

如果您不喜欢UserProfile这个名称,您可以适当更改它。关键是您与User之间具有一对一的关系。


我想那应该是这样的。谢谢。 - Andrew
1
请注意,此答案已经过时。请查看Soviuts的答案。 - Lutz Prechelt

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']

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接