iSolitude 2020-04-25 20:28 采纳率: 0%
浏览 240

django自定义用户模型使用的uid做主键,但是migrate报错默认id字段无效,django版本3.0.3

用户模型代码

class UserModel(AbstractUser):
    first_name = None
    last_name = None
    gender = (
        ('male', '男'),
        ('female', '女'),
        ('privacy', '不愿告知')
    )
    uid = ShortUUIDField(primary_key=True)
    phone = models.CharField(verbose_name='手机号', max_length=11, blank=True)
    sex = models.CharField(verbose_name='性别', choices=gender, default='男', max_length=32)
    avatar = models.ImageField(verbose_name='头像', upload_to='avatar/', blank=True)

    class Meta:
        verbose_name = '用户'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.username

报错代码

django.db.utils.InternalError: (1067, "Invalid default value for 'user_post_id'")

  • 写回答

1条回答 默认 最新

  • ~白+黑 新星创作者: python技术领域 2024-07-19 09:23
    关注
    UUIDField¶
    
    class UUIDField(**options)¶
    
    一个用于存储通用唯一标识符的字段。使用 Python 的 UUID 类。当在 PostgreSQL 上使用时,它存储在一个 uuid 的数据类型中,否则存储在一个 char(32) 中。
    
    通用唯一标识符是 primary_key 的 AutoField 的一个很好的替代方案。数据库不会为你生成 UUID,所以建议使用 defaultimport uuid
    from django.db import models
    
    
    class MyUUIDModel(models.Model):
        id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
        # other fields
    
    请注意,一个可调用对象(省略括号)被传递给 default,而不是 UUID 的实例。
    
    
    评论

报告相同问题?