Ошибка значения: поле ‘id’ ожидало число, но получило ‘asd’

#django #django-models

#django #django-модели

Вопрос:

Я искал другие вопросы, но это просто разные ошибки.

Я разрабатывал простое приложение для форума, и теперь я дошел до той части, где я могу комментировать темы. Но потом я понял, что мне не хватает отношения ForeignKey к теме из комментария. Затем я создал новый ForeignKey, но, как обычно, он просит меня указать значение по умолчанию. Я как раз собирался добавить пустые и нулевые значения true, но затем мои руки просто автоматически выдают asd значение по умолчанию. Теперь, даже когда мне удается выполнить миграцию с помощью makemigrations, я получаю эту ошибку при создании migrate как я могу это исправить?

Ответ №1:

Вы должны отредактировать файл миграции, созданный после makemigration. Это поле есть в файле миграции.

Например:

 field=models.ForeignKey(default="asd")
  

Вы должны отредактировать этот раздел и повторно запустить migrate

Комментарии:

1. Я не хотел, чтобы моя голова волновалась из-за этого, и поскольку я не добавил никаких данных, связанных с этой моделью. Я просто удалил все, что связано с комментариями в миграциях. Но да, факт в том, что это решено, и спасибо, что позволили мне учиться.

Ответ №2:

ForeignKey — это строка в вашей таблице, которая каким-то образом является подмножеством целых чисел. Итак, если вы добавляете ForeignKey в одну модель после вставки данных в эту модель (без значений по умолчанию и null), он спросит, как вы хотите добавить эту строку, которая не равна null в данных вашей таблицы, и поскольку это поле имеет целочисленный тип, вы должны ввести в это поле допустимое целое число (не string или любые другие типы). Обратите внимание, что целое число, которое вы введете в качестве значения по умолчанию, должно быть допустимым выбором (т. Е. Существует topic запись с этим целым числом в качестве первичного ключа или первичный ключ вашей связанной таблицы, который вы хотите подключить ForeignKey к нему), и если нет, вы не сможете запустить migrate , потому что на этот раз Django поднимет IntegrityError .