如何为以movie_id为主键的Django Film模型添加自动递增数字字段
如何在Django模型中保留自定义主键的同时添加自动递增长序号字段?
没问题,我懂你的需求——你已经把movie_id设为Film模型的主键,但还想要一个像默认id那样自动递增的行号字段,用来标记表中的行顺序对吧?这完全可以实现,只需要手动添加一个自动递增字段就行,不会影响你现有的movie_id主键。
直接修改你的模型代码,加上这一行就好:
class Film(models.Model): title = models.CharField(max_length=200) movie_id = models.CharField(max_length=8, unique=True, primary_key=True) director = models.ForeignKey('Director', on_delete=models.SET_NULL, null=True) year = models.IntegerField(null=True) genres = models.ManyToManyField(Genre) # 新增自动递增的行号字段 row_number = models.BigAutoField(unique=True)
几点说明:
- 这里用
BigAutoField而不是AutoField是因为它支持更大的数值范围(从1到9223372036854775807),比AutoField的整数范围更适合未来数据量增长的情况。 unique=True保证这个行号字段的值不会重复,和默认id的行为一致。- 因为你已经指定了
movie_id作为主键,Django不会再自动生成默认的id字段,我们手动添加的row_number完全独立,不会干扰movie_id的主键功能。
最后别忘了执行迁移:
在终端运行以下命令,把这个字段同步到数据库:
python manage.py makemigrations python manage.py migrate
如果你的表已经有现有数据,Django会自动为已有记录填充递增的row_number值,不用手动处理~
内容的提问来源于stack exchange,提问作者Vitali Skripka
相关产品推荐
相关产品推荐

