我的数据模型由三个主要实体组成:
class User(models.Model):
...
class Source(models.Model):
user = models.ForeignKey(User, related_name='iuser')
country = models.ForeignKey(Country, on_delete=models.DO_NOTHING)
description = models.CharField(max_length=100)
class Destination(models.Model):
user = models.ForeignKey(User, related_name='wuser')
country = models.ForeignKey(Country)
我正在尝试创建一个查询集,该查询集将所有源与目标按用户连接(多对多)。通过这种方式,我将为每个用户提供一个包含所有可能的源/目标组合的表。 在SQL中,我会简单地加入三个表并从每个表中选择适当的信息。
我的问题是如何执行查询?如何访问查询数据?
答案 0 :(得分:0)
在django中,查询是在模型对象上完成的,它的井documented。查询或查询集是惰性的,当它们执行时,它们通常会返回一个dict列表,列表中的每个dict都包含field
后跟value
,例如:[{'user':'albert','country':'US and A :) ','description':'my description'},....]
。
每个用户的所有可能的来源,目的地组合?
我认为你必须使用reverse relation ship来完成这项工作,例如:
my_joined_query = User.objects.values('user','source__country','source__description','destination__country')
请注意,我使用的模型Source
和Destination
的较小案例名称与ForeignKey
有User
关系,这将加入所有三个表格查看其丰富的文档。
修改强>
要进行内部联接,您必须告诉查询,这可以通过在反向模型名称上使用__isnull=False
来实现:
my_innerjoined_query = User.objects.filter(source__isnull=False,destination__isnull=False)
这应该在所有表上进行内连接。
然后,您可以使用之前的values
选择要显示的内容。