向Django模型添加数字字段

3

我有一个Django电影模型

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)

我需要将电影编号(movie_id)作为主键,但同时我还需要一个字段,在表中表示项目的行数。

它必须自动递增,就像标准的"id"字段一样。

我该如何添加这个字段?

这个问题https://stackoverflow.com/users/3404040/take-care与我的类似,但我不能使用我的“number”字段作为主键,因为movie_id已经用于此目的。


可能是如何在Django中创建自动递增整数字段的重复问题。 - Take_Care_
@Take_Care_ 不行,因为我不能把这个“number”字段作为主键。 - Vitali Skripka
在 Django 中,每个模型默认都有其 idpk 字段,因此即使您没有手动设置 AutoField,仍然可以调用其中之一。 - Chiefir
2个回答

3
您可以使用类似以下的方法,但如果您不想使用默认的 id 字段,这可能会消耗资源。
class Film(models.Model):
    def number():
        no = Film.objects.count()
        return no + 1

    movie_row = models.IntegerField(unique=True,default=number)

0

来自Django文档

默认情况下,Django为每个模型提供以下字段:

id = models.AutoField(primary_key=True)

这是一个自增的主键。

如果您想指定自定义主键,请在其中一个字段上指定primary_key=True。如果Django看到您已经明确设置了Field.primary_key,它就不会添加自动id列。

每个模型都需要恰好有一个字段具有primary_key=True(可以是显式声明或自动添加)。

如果您希望将其明确命名为movie_id,则可能需要类似以下内容:

class Film(models.Model):
    movie_id = models.AutoField(primary_key=True)

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