我在我的模型中在名为“Activity”
的类下创建了以下ForeignKey字段related_workoutrecord = models.ForeignKey(WorkoutRecord, null=True, blank=True)
ForeignKey与一个名为WorkoutRecord的类相关,该类应该被允许为空。
添加此列后,我向南运行并收到以下错误消息:
NameError: name 'WorkoutRecord' is not defined
有关正在发生的事情的任何想法?我已经确认'WorkoutRecord'是我模型中的一个类。
我是否需要将WorkoutRecord编写为字符串(带引号),例如:
related_workoutrecord = models.ForeignKey('WorkoutRecord', null=True, blank=True)
我很感激反馈
答案 0 :(得分:11)
根据我的评论,请确保课程“活动”可以访问“ WorkoutRecord ”课程。
错误意味着它所说的,WorkoutRecord未在您的Activity类中定义。
首先检查这两件事:
1)你导入了吗?
2)WorkoutRecord是否在Activity之前定义?
答案 1 :(得分:5)
必须在Activity类之前(即上面)定义WorkoutRecord类,以便使用不带引号的类的引用。如果类之间存在循环引用,那么使用带引号的字符串版本将获得对代码中稍后定义的类的延迟引用。
答案 2 :(得分:3)
您有两种选择:
您可以从它所在的任何模块中导入WorkoutRecord
模型(这是标准的python方法)
from myapp.models import WorkoutRecord
related_workoutrecord = models.ForeignKey(WorkoutRecord, null=True, blank=True)
使用这种方法,有时您可能会遇到循环导入的情况,因此有另一种选择:
您可以使用字符串作为ForeignKey
或ManytoManyField
的第一个参数来指定您希望与之建立关系的模型。这是一个django功能。如果你看the documentation for ForeignKey
relationships,就说:
如果需要在尚未定义的模型上创建关系,可以使用模型的名称,而不是模型对象本身:
这意味着如果模型尚未定义,但位于同一模块中(即它位于当前代码下方),您只需在引号中使用模型名称:'WorkoutRecord'
,但如果模型在另一个应用程序/模块中,您还可以将其指定为字符串:'myapp.WorkoutRecord'
答案 3 :(得分:2)
使用'yourapp.Model'
格式。
foo = models.ForeignKey('yourapp.WorkoutRecord', null=True, blank=True)
带引号。
答案 4 :(得分:0)
如果在一个应用程序中有两个类名,请确保在对我有用的所引用类的名称周围添加“单引号”。
class foreignClass(models.Model):
category_id = models.ForeignKey('Product_categories', on_delete=models.CASCADE)