Отображение недействительного внешнего ключа django
Я получаю эту ошибку недопустимого внешнего ключа в календарях, не уверен, как ее исправить.
Вот код в моих моделях:
class Calendar(models.Model):
name = models.CharField(max_length=100)
description = models.TextField(blank=True, null=True)
start_date = models.DateField()
end_date = models.DateField()
owner = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
Я пытаюсь связать его с вошедшим пользователем, но не думаю, что это работает. Я также пытался вывести записи в django shell, но он также выдает ошибку "NameError: name 'Calendar' is not defined" с этим запросом:
calendars = calendars.objects.all()
Что случилось?
Похоже, что в вашей базе данных есть недопустимая запись Calendar
.
Исходя из определения поля owner
, оно должно хранить идентификатор записи User
, которая является владельцем этого Calendar
.
Однако, глядя на ваше сообщение об ошибке:
Строка в таблице 'calendars_calendar' с первичным ключом '1' имеет недопустимый внешний ключ: calendar_calendar.owner_id содержит значение 'owner id', которое не имеет соответствующего значения в auth_user.id.
Это говорит о том, что в вашей таблице calendars_calendar
есть запись следующего содержания:
| id | owner_id |
|----|----------|
| 1 | owner id |
Это недопустимо, поскольку значение столбца owner_id
должно быть первичным ключом записи в таблице auth_user
.
Почему это произошло? Как это исправить?
Эта недопустимая запись могла попасть в вашу базу данных из-за того, что вы использовали необработанный SQL-запрос или изменили определение модели. Тем не менее, вы должны исправить это, чтобы запись работала.
Если вы знаете идентификатор User
, который должен быть владельцем этого Calender
, вы можете задать его с помощью этого запроса:
Calender.objects.filter(id=1).update(owner_id=<USER_ID_OF_OWNER>)
Почему ваш запрос не сработал?
NameError: name 'Calendar' is not defined
предполагает, что вы ссылаетесь на класс Calender
там, где он не определен.
Возможно, вы забыли его импортировать?
Советы
Как правило, включать текст ошибки для подобных ошибок (которые являются текстовыми) в ваш вопрос проще, чем привязывать изображение.