InvalidTextRepresentation:bigint 类型的无效输入语法:"All Forms"

InvalidTextRepresentation: Invalid input syntax for type bigint:"All Forms"

我的模型中有一个字段

book_classes = (("","Select Form"),("1",'F1'),("2",'F2'),("3",'F3'),("4",'F4'),("All Forms","All Forms"))
b_classes = models.CharField('Form',max_length=9,choices=book_classes,default="n/a")

然后改成

b_class =models.ForeignKey(ClassBooks,on_delete=models.CASCADE)

在哪里

class ClassBooks(models.Model):
    name = models.CharField(max_length=10)

我现在卡住了,因为当我尝试迁移时出现错误。

Invalid input syntax for type bigint:"All Forms"

Makemigrations 和 migrate 在开发中运行良好。当我推送到数字海洋时,迁移返回了所述错误。 请问我需要做什么?

如果你不想丢失 db.sqlite3,请先尝试删除迁移

第 1 步:删除 db.sqlite3 文件。

第 2 步:$pythonmanage.py迁移

第 3 步:$pythonmanage.pymakemigrations

第 4 步:使用 $pythonmanage.pycreatesuperuser

创建超级用户

新的db.sqlite3会自动生成

参见 Foreign Key field。默认情况下,FK 字段将使用引用的 table(模型)的主键,在本例中为 ClassBooksid 字段。 id 字段是一个整数,因此在尝试使用字符串字段时会出现错误。为了使这项工作,从文档 link :

ForeignKey.to_field

The field on the related object that the relation is to. By default, Django uses the primary key of the related object. If you reference a different field, that field must have unique=True.

在你的情况下变成:

b_class =models.ForeignKey(ClassBooks,to_field='name',on_delete=models.CASCADE)

这假设 name 字段具有 Unique 约束。

虽然我不确定 "", "1", "2" ... 如何映射到 ClassBooks.name