我是Django的新手,我正在尝试构建这个查询。
也许你可以更好地理解图像。
我的问题:
鉴于user.id我需要知道他所连接的客户的所有其他user.id (因此通过 from_customer 和 to_customer ):
所以基本上,首先我需要使用反向查找从User切换到RelatedCustomer,获取所有设置,然后返回知道每个 user.id 顾客在集合中。
EDIT2:
到目前为止我所得到的:
# This gives me back a customer profile given a user.id (2)
cm = CustomerProfile.objects.get(base_profile__user=2)
# M2M lookup. Given one customer returns all the RelatedCustomer relations
# that he has as a part of the 'from' M2M
cm.from_photographer.all()
链接前两个:给定 user.id ,我获得了与CustomerRelated关系的 queryset :
rel = CustomerProfile.objects.get(base_profile__user=2).from_photographer.all()
这给了我类似的东西:
[<CustomerRelated: from TestCustomer4 to TestCustomer2 >,
<CustomerRelated: from TestCustomer4 to TestCustomer3 >]
在这种情况下, user.id = 2 的用户是 TestCustomer4 。
我的问题:
到目前为止一切都那么好,但现在有了这个设置我如何才能获得 to_customer 的所有user.id ?
也就是说,如何获得TestCustomer2
和TestCustomer3
的 user.id ?
答案 0 :(得分:4)
首先,这不是您在django中查询数据库的方式。其次(因为你正在学习),最好指出你可以运行dbshell
来尝试不同的东西。最后,文档中描述了这种问题。
我告诉你这个,因为作为一个初学者,我也觉得在整个事情中导航有点困难。查找内容的最佳方法是使用google,最后添加 django 。
我知道你的感受,文档搜索糟透了,对吗?嘿,我觉得你,这就是为什么你总是按我描述的方式搜索。一旦掌握了文档,您就会觉得文档标题页更加直观。
好的,现在回答:
要访问ManyToMany
,OneToOne
或ForeignKey
字段,您需要使用__
通常称为 dunder 。
所以,这就是 I 这样做的方式。请注意,还有其他方法,可能更好的方法:
thing_I_want = RelatedCustomer.objects.get(to_customer__id=2)
但请注意,如果您想获得客户列表,请使用filter()
。这是一个例子(以购买数量为例):
things_I_want = RelatedCustomer.objects.filter(to_customer__no_of_purchases=16)
另请注意,过滤器的优点在于您将一个过滤器堆叠在另一个过滤器之上。您可以在我在下面提供的文档链接中阅读有关这些功能的更多信息。
那会得到你想要的东西。现在,您可能会对此有更多疑问,以及它们如何协同工作。不用担心,请点击this documentation link查看。
修改强>
看起来你想做的事情可以通过django完成,但如果你想用sql来做,那么这也是可能的。例如,SomeModel.objects.raw("SQL_HERE")
。表的名称通常为<app>_<model>
。
但是,您所问的也可以使用ORM在django中完成。但这很棘手。
答案 1 :(得分:0)
好的,像往常一样,只要你得到答案,它总是比你期望的容易得多。
我想这对我有用:
User.objects.filter(base_profile__customer_profile__to_customer__in=
User.objects.get(id=2).base_profile.customer_profile.from_customer.all())
非常感谢@Games Brainiac