Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用Django ORM将queryset作为联接查询的结果?_Python_Django_Django Rest Framework - Fatal编程技术网

Python 如何使用Django ORM将queryset作为联接查询的结果?

Python 如何使用Django ORM将queryset作为联接查询的结果?,python,django,django-rest-framework,Python,Django,Django Rest Framework,我有下表和它们之间的关系 class Customer(models.Model): customer_id = models.BigIntegerField(unique=True, db_index=True) email = models.CharField(max_length=200, blank=True,null=True) class B(models.Model): customer_id = models.ForeignKey(Cus

我有下表和它们之间的关系

class Customer(models.Model):    
    customer_id = models.BigIntegerField(unique=True, db_index=True)    
    email = models.CharField(max_length=200, blank=True,null=True)

class B(models.Model):
    customer_id = models.ForeignKey(Customer, to_field="customer_id", db_column="customer_id")
    status = models.CharField(max_length=200,blank=False, default="pending")

class C(models.Model):    
    customer_id = models.ForeignKey(Customer, to_field="customer_id", db_column="customer_id")
    engagement_rate = models.FloatField(default=0.0)
现在,我想创建分页Api来从表中获取每一行 表B和C中的客户及其相关详细信息。我已在这两个表之间设置了外键。我读过这篇文章做加入查询,但没能申请我的案例


请任何人都可以建议我在一次db调用中获取此数据的方法。

您不能在一次调用中完成此操作,但您肯定可以在两次或三次调用中使用
预回迁相关的
完成此操作

A.objects.all().prefetch_related('B', 'C')

不可能在一个查询中获取所有这些数据。对服务器的一个查询就是。但这是一个单一的ORM查询

Customer.objects.prefetch_related('c','b').filter(somecondition)
如果您可以使用select_related,那么它将是一个SQL查询,但是因为外键关系是反向遍历的,所以您需要使用

另一方面,prefetch_-related对每个 关系,并在Python中执行“连接”。这使得它能够 预取多对多和多对一对象,这是无法完成的 除了外键和一对一外,使用select_related select\u相关支持的关系

这仍然只是三个问题

如果您真的很想在一个SQL查询中实现这一点
Customer.objects.raw()
是您的朋友。

试试这个

Customer.objects.prefetch_related('b_set', 'c_set').filter(condition)

你到底想加入什么?这里的目标是什么?我认为您查看的博客很旧,并且有其他方法可以使用.anotate()操纵querystry。谢谢您的回答。我遇到此异常
在客户对象上找不到'b','b'是预取\u related()的无效参数。
我实际创建了模型并尝试了查询。我打赌你的真实模型不是名字B和C:-)你是对的,真实模型有不同的名字。我试过用我的真名模特。但不起作用。不管你给了我什么指导,我都会设法找到解决办法。最后发生了什么?我使用了
Customer.objects.raw()
。它解决了我的问题@谢谢你的建议。我会试试你的建议。