我有三个表person(id、电子邮件、密码、类型(、user_location(id、location、u_id(和reviews(id、review、from_id、to_id(。user_location(u_id(是person(id(的外键。评论(from_id,to_id(对个人(id(也是外键。那么,我如何筛选出一个类型为"a"、位置为"b"的人,以及他获得的带有评审人姓名的评审?
型号.py
class Person(models.Model):
email = models.CharField(max_length=30)
pwd = models.CharField(max_length=30)
type = models.CharField(max_length=30)
class User_locations(models.Model):
location = models.CharField(max_length=30)
u_id = models.ForeignKey('Person', on_delete=models.CASCADE)
不确定我是否真的理解你想做什么,但这应该会给你指明正确的方向。不要忘记参考文档中的多对一关系和跨越关系的查找。上面写着:
若要引用"反向"关系,请使用模型的小写名称。
然后使用普通的__
访问属性。
a_and_b = Person.objects.filter(type='a', user_locations__location='b')
reviewers = Person.objects.filter(to_id__in=a_and_b)
第一个查询选择具有type
a
和location
b
的所有用户。第二个查询对这些结果进行筛选。这一切都是未经测试的,所以你可能需要调整一下。底线:遵循关系。附带说明一下,您可能想了解Django模型命名约定。