InvalidTextRepresentation: Неверный синтаксис ввода для типа bigint: "Все формы"

У меня в модели было поле с

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,help_text='The class the book belongs to')

Теперь я застрял, потому что когда я пытаюсь мигрировать, я получаю ошибку.

Invalid input syntax for type bigint:"All Forms"

Что мне нужно сделать?

Если вы не хотите потерять db.sqlite3, попробуйте сначала удалить миграции

Шаг 1: Удалите файл db.sqlite3.

Шаг 2 : $ python manage.py migrate

Шаг 3 : $ python manage.py makemigrations

Шаг 4: Создайте суперпользователя с помощью $ python manage.py createsuperuser

новый db.sqlite3 будет сгенерирован автоматически

См. Поле чужого ключа. По умолчанию поле FK будет использовать первичный ключ ссылающейся таблицы (модели), в данном случае поле id из ClassBooks. Поле id является целым числом, поэтому вы получите ошибку при попытке использовать строковое поле. Чтобы заставить это работать, из ссылки на документацию :

ForeignKey.to_field

Поле связанного объекта, к которому относится отношение. По умолчанию Django использует первичный ключ связанного объекта. Если вы ссылаетесь на другое поле, то это поле должно иметь unique=True.

Что в вашем случае становится:

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

Это предполагает, что поле name имеет ограничение Unique.

Хотя я не уверен, как "", "1", "2" ... сопоставить с ClassBooks.name.

Вернуться на верх