Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何访问django模型中的特定对象?_Django - Fatal编程技术网

如何访问django模型中的特定对象?

如何访问django模型中的特定对象?,django,Django,我有以下模型: class Question(models.Model): title = models.CharField(max_length=100) date_pub = models.DateTimeField(auto_now_add=True) professor = models.ForeignKey(Professor, on_delete=models.CASCADE, default="") #Show only courses belong

我有以下模型:

class Question(models.Model):
    title = models.CharField(max_length=100)
    date_pub = models.DateTimeField(auto_now_add=True)
    professor = models.ForeignKey(Professor, on_delete=models.CASCADE, default="")
    #Show only courses belonging to this professor
    classes = Classes.objects.filter()
我想知道如何访问只属于上述“教授”的课程,因为如果许多教授提出问题,我不希望所有课程都出现在教授与这些课程无关的情况下。我只希望他们创建的类出现

我试过:

classes = Classes.objects.filter(professor=professor)
其中professor是Classes模型中的一个字段,但这会给出一个错误,即模型尚未加载

课程模式:

class Classes(models.Model):
    name = models.CharField(max_length=100, blank=True)
    session = models.IntegerField(blank=False)
    days = MultiSelectField(choices=days_of_week, default="", blank=False)
    school = models.CharField(max_length=250, default="")
    professor = models.ForeignKey(Professor, on_delete=models.CASCADE, default="")
教授模式:

class Professor(User):
    about = models.TextField(max_length=500, blank=True, null=True)
    school_name = models.CharField(max_length=250)
    isProfessor = models.BooleanField(default=False)
    class Meta:
        verbose_name = 'Professor'

如果您想获得给定
教授
(教授将是
教授
实例)的课程,您应该执行以下操作:

Classes.objects.filter(professor=professor)
或者使用反向查找:

professor.classes_set.all()
如果要从
问题
类访问与
问题
相关的教授,则不能使用
教授
,因为这不是
教授
实例,而是
模型.外键
字段

您需要在
问题
类中创建一个新方法来执行预期操作,这样您就可以访问
self.professor
,它是与
问题
self
实例相关的
professor
实例:

def professor_classes(self):
    return Classes.objects.filter(professor=self.professor)
然而,我觉得很奇怪,你想从
问题
模型中检索教授的课程。这似乎不是它的责任。我建议你把这种逻辑转移到别处。或者根本不使用这种逻辑,因为使用我展示的两行中的任何一行都足够简单,不需要额外的方法


PS:使用复数类名通常是个坏主意。在某些情况下,它是可以接受的,但您应该避免它们。你只需在谷歌上搜索一下就可以了解更多信息。

向我们展示
教授
之间的关系。是否应该是.filter(Professor=self.Professor)?我想检索教授在问题模型中定义的类,以便他们知道该问题与哪个类相关。而且,我仍然无法将一个问题与教授创建的课程联系起来。在管理中,我希望下拉菜单仅显示属于创建问题的教授的类,而不是所有已创建的类。如果您想知道问题与哪个类相关,为什么不定义该关系?您当前的设计没有反映这一点。你所能做的就是通过professor获取类,这同样很简单,只需执行
question.professor.classes\u set.All()
classes.objects.filter(professor=question.professor)
,假设您已将一个
问题
实例化为
问题
。我无法通过professor获取课程,因为在包含professor和Class的应用程序中,professor是在类之前定义的,因为类需要首先定义professor。因此,我不能为教授上课,因为课程是在之后定义的。我以前试着这样做,但我没能让它工作,这就是为什么现在是这样。如果有办法解决的话,我会的,但我觉得现在有点晚了。模型定义的顺序与您可以定义什么关系或执行什么查询无关。@那家伙定义的顺序与模型之间的关联没有任何关系。我还是不明白你的问题是什么,我的回答怎么帮不了你。你的问题到底是什么?