如何访问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。因此,我不能为教授上课,因为课程是在之后定义的。我以前试着这样做,但我没能让它工作,这就是为什么现在是这样。如果有办法解决的话,我会的,但我觉得现在有点晚了。模型定义的顺序与您可以定义什么关系或执行什么查询无关。@那家伙定义的顺序与模型之间的关联没有任何关系。我还是不明白你的问题是什么,我的回答怎么帮不了你。你的问题到底是什么?