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
.