我有以下型号:
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)
其中教授是Classes模型中的一个字段,但这会给出错误,说明模型尚未加载。
类Model:
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'
答案 0 :(得分:1)
如果您想获得给定professor
(教授将是Professor
实例)的课程,您应该这样做:
Classes.objects.filter(professor=professor)
或使用反向查找:
professor.classes_set.all()
如果您想要访问Question
课程中与Question
相关的教授,则无法使用professor
,因为这不是Professor
实例,但models.ForeignKey
字段。
您需要在Question
课程中创建一个新方法来执行相同的操作,以便您可以访问self.professor
,这是Professor
与{相关的}实例{1}} {1}}的实例:
self
但是,我发现你想要从Question
模型中检索教授所拥有的类,这很奇怪。它似乎没有任何责任。我建议你把这个逻辑移到其他地方。或者根本不使用这种逻辑,因为使用我展示的几行中的任何一行都很简单,只需要其他方法。
PS:使用复数类名通常是个坏主意。在某些情况下,它被接受,但你应该总体上避免它们。您可以通过谷歌搜索来了解更多有关此事的信息。