对最后一个问题抱歉。本来应该说得更好。
我有三个班级,学生和另一个成人和成人档案。我想提出一个问题,让所有来自美国的成年人都可以使用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')
需要一些帮助。希望我这次能说得更好......
答案 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')