在Django中进行涉及ForeignKey的查询

时间:2012-08-26 15:26:11

标签: django

对最后一个问题抱歉。本来应该说得更好。

我有三个班级,学生和另一个成人和成人档案。我想提出一个问题,让所有来自美国的成年人都可以使用Student class完成。这是因为我的查询集是Student.objects.all()并且基于此查询集,我想从美国获得所有成年人(通过AdultProfile)。这是代码的示例,而原始代码更复杂,更长。这个例子显示了问题的要点。

class Student(models.Model):
   name = models.CharField(max_length=255)
   birthday= models.DateField(blank=True,null=True)

class Adult(models.Model):
   user = models.OneToOneField(User)
   parent= models.ForeignKey(Student,related_name="relationships")

class AdultProfile(models.Model):
   country = models.CharField(max_length=2)
   adult = models.OneToOneField(Adult,related_name='profile')

需要一些帮助。希望我这次能说得更好......

1 个答案:

答案 0 :(得分:1)

您无法通过Student查询集执行此操作。您最终使用Student类中的Adult对象的唯一方法是来自学生实例,通过其反向相关访问者:student_instance.relationships.all()

您的django ORM旅行中缺少的成分可能是您可以通过其related_name(或默认情况下,模型名称)查询相关对象(FK,OneToOne)。

student_qs = Student.objects.all() # some query
adults_in_us = Adult.objects.filter(parent__in=student_qs, profile__country='US')