gpt4 book ai didi

django - 在 Django 中使用 through 查询多对多关系

转载 作者:行者123 更新时间:2023-12-04 00:41:56 27 4
gpt4 key购买 nike

我是 Django 的新手,在尝试构建此查询时让自己很头疼。

  • 我有一个 BaseProfile,它通过 OneToOne 字段连接到 User
  • 我正在将 CustomerProfile 中的配置文件与 OneToOne 字段关联到 BaseProfile
  • CustomerProfile 通过 RelatedCustomer 与其他CustomerProfile(自身)具有多对多关系 模特。
  • RelatedCustomer 中,我指定了 from_customerto_customer 外键



也许通过图像您可以更好地理解。

enter image description here

我的问题:
给定一个 user.id,我需要知道他所连接的客户的所有其他 user.id(因此通过 from_customerto_customer):

所以基本上,首先我需要使用反向查找 从 User 挖掘到 RelatedCustomer,获取所有集合,然后返回了解每个集合的 user.id集合中的客户。

编辑 2:

到目前为止我已经达到了:

# 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,我获得一个queryset CustomerRelated 关系:

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
即,如何获取TestCustomer2TestCustomer3user.id

最佳答案

首先,这不是您在 Django 中查询数据库的方式。其次(因为你正在学习),最好指出你可以运行 dbshell尝试不同的事情。最后,文档中描述了此类问题。

我告诉你这个,因为作为一个初学者,我也觉得整个事情的导航有点困难。最好的查找方式就是使用 google,并在末尾添加一个 django

我知道您的感受,文档搜索糟透了,对吧?嘿,我感觉到你了,所以你总是按照我描述的方式搜索。一旦掌握了文档,您会觉得文档标题页更加直观。

好的,现在开始回答:访问 ManyToMany , OneToOneForeignKey字段,您需要使用 __通常称为 dunder

所以,这就是要做的事情。请注意,还有其他方法,而且可能是更好的方法:

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 中完成。但这会很棘手。

关于django - 在 Django 中使用 through 查询多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17690674/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com