首页 > 解决方案 > 我正在制作一个 User(AbsrtactUser) 模型,我需要创建一个自动递增的字段

问题描述

    class CustomUser(AbstractUser):
        email =  models.EmailField(unique=True,blank=True,max_length=254, verbose_name='email address')
        phone_number = models.IntegerField(blank=True,null=True,verbose_name="phone number")
        ids = models.UUIDField(blank=True,null=True,default=uuid.uuid4, editable=False)
        #parent_id = models.IntegerField(blank=True,null=True)
        role_id = models.IntegerField(null=True,blank=True)

如何将 role_id 创建为 auto_increment 字段。我尝试制作 role_id 字段 AutoField 但这只是给了我一个错误,我们不能在一个模型中拥有 2 个 Autofield,我不想使用 django 默认 id 主键进行任何更改,因为我需要该字段。我们可以将(id 主键)的引用提供给(角色 id) ..吗?

标签: djangodjango-models

解决方案


您可以创建一种方法来为该字段提供默认值。

 def auto_increment():
        last = CustomUser.objects.all().last()
        if not last:
            return 1
        return last.role_id + 1
    
    
class CustomUser(AbstractUser):
        email =  models.EmailField(unique=True,blank=True,max_length=254, verbose_name='email address')
        phone_number = models.IntegerField(blank=True,null=True,verbose_name="phone number")
        ids = models.UUIDField(blank=True,null=True,default=uuid.uuid4, editable=False)
        role_id = models.IntegerField(default=auto_increment)

另一种方法是覆盖模型的保存方法并在保存新对象之前进行计算。


推荐阅读