Django ForeignKey вопрос, связанный класс не найден
Я создал следующее поле ForeignKey в моей модели в классе под названием "Activity"
related_workoutrecord = models.ForeignKey(WorkoutRecord, null=True, blank=True)
внешний ключ связан с классом WorkoutRecord, который должен быть пустым.
после добавления этого столбца я побежал на юг и получил следующее сообщение об ошибке:
NameError: name 'WorkoutRecord' is not defined
любые мысли о том, что происходит? Я подтвердил, что "WorkoutRecord" - это класс в моей модели.
мне нужно написать WorkoutRecord как строку (с цитаты) например:
related_workoutrecord = models.ForeignKey('WorkoutRecord', null=True, blank=True)
Я ценю обратную связь
4 ответов
согласно моему комментарию, убедитесь, что класс'активность' имеет доступ к классу 'WorkoutRecord'.
ошибка означает, что она говорит, что WorkoutRecord не определен в вашем классе активности.
сначала проверьте эти две вещи:
1) вы его импортируете?
2) был ли WorkoutRecord определен перед активностью?
класс WorkoutRecord должен быть определен перед (т. е. выше) классом Activity, чтобы использовать ссылку на класс без кавычек. Если между классами есть циклические ссылки, то использование цитируемой Строковой версии будет работать, чтобы получить ленивую ссылку на класс, определенный позже в коде.
у вас есть два варианта:
-
вы можете импортировать
WorkoutRecord
модель из любого модуля, в котором она находится (это стандартный подход python)from myapp.models import WorkoutRecord related_workoutrecord = models.ForeignKey(WorkoutRecord, null=True, blank=True)
используя этот подход, иногда вы можете попасть в ситуацию, когда у вас есть круговой импорта, так есть альтернатива:
-
вы можете использовать строку в качестве первого аргумента к
ForeignKey
илиManytoManyField
чтобы указать модель, с которой вы хотите установить отношения. Это особенность django. Если вы посмотрите на документацияForeignKey
отношения он говорит:Если вам нужно создать отношение на модели, которая еще не определена, вы можете использовать имя модели, а не сам объект модели:
это означает, что если модель еще не определена, но находится в том же модуле (т. е. ниже вашего текущего кода), Вы можете просто использовать имя модели в кавычках:
'WorkoutRecord'
, а если модель находится в другом приложении / модуле, вы также можете указать это как строку:'myapp.WorkoutRecord'