使用UUID作为id字段的自定义Django用户模型

时间:2017-05-22 07:12:15

标签: python django django-models django-users

我正在尝试扩展用户模型并添加一些字段,以下是我的方法:

dataLayer.push({
'event':'VirtualPageview', 
'virtualPageURL':'/Thankyou.html',
'transactionId': ID,
'transactionAffiliation': '',
'transactionTotal': PRICE ,
'transactionProducts': [
{
  sku: '',
  name: '',
  category: '',
  price: '',
  quantity: 1   
}]
});

所以基本上有两种类型的用户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,现在只要我们将两种类型的用户保存到数据库中,就会发生以下情况

  1. 将创建一个User_Two模型记录,其中包含单独的值1,2,3等,
  2. 将使用ID为1,2,3
  3. 创建User模型记录
  4. 将使用ID为1,2,3
  5. 创建User_One模型记录

    因此,对于每个模型记录保存,Django或数据库都生成了id 1,2,3。

    但是我要求User模型应该为id字段值生成User_Two来代替整数,这可能吗?

    我的意思是下面的内容

    uuid

1 个答案:

答案 0 :(得分:1)

使用uuid作为主键需要几个额外的步骤:

  1. UUIDField用于您的ID字段而不是InegerField,因为uuid不是一个整数
  2. 为该字段指定primary_key=True
  3. 要获取自定义用户模型,请将其子类化为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'
    

    在进行任何迁移(创建数据库)之前执行此操作非常重要,否则这将无效。