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

时间:2017-05-27 12:21:56

标签: 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 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'

1 个答案:

答案 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:使用复数类名通常是个坏主意。在某些情况下,它被接受,但你应该总体上避免它们。您可以通过谷歌搜索来了解更多有关此事的信息。