Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.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相当于MySQL中的,并按模型的字段进行过滤_Python_Mysql_Django_Django Models_Orm - Fatal编程技术网

Python Django相当于MySQL中的,并按模型的字段进行过滤

Python Django相当于MySQL中的,并按模型的字段进行过滤,python,mysql,django,django-models,orm,Python,Mysql,Django,Django Models,Orm,我有两张桌子: table1 ----------------- | id | salary | | 1 | 2500 | | 2 | 500 | ----------------- table2 ------------------------------- | id | outlay | table1_fk | | 1 | 20 | 1 | | 2 | 40 |

我有两张桌子:

table1
 -----------------
|  id  |  salary  |  
|  1   |   2500   |
|  2   |    500   |
 -----------------

table2

 -------------------------------
|  id  |  outlay  |  table1_fk  |  
|  1   |   20     |      1      |
|  2   |   40     |      1      |
|  3   |  1000    |      2      |
 -------------------------------
我需要从表1+支出总额中选择所有行,其中工资大于支出总额 MySQL查询将是:

选择t1.*,合并支出2.支出,0作为总支出 从表1中取t1 将表2作为t2在t1.id=t2.table1上左连接 按t1.id分组 总支出<1.工资; Django ORM有可能吗?到目前为止,我有:

Model1.objects.filtersomefilterlogic.annotateoutlay_total=Summodel2__支出 我正在使用Django 2.2.5和MySQL您可以在该子句之后:


这回答了你的问题吗?这就是我需要的,我错过了F函数。此外,我还修改了注释,使其与MySQL查询模型1.objects.filtersomefilterlogic.annotateoutlay_total=CoalesceSummodel2_uuu支出,0.filter total_支出uuu lt=F'salary'完全对应
from django.db.models import F, Sum

Model1.objects.filter(
    somefilterlogic
).annotate(
    outlay_total=Sum('model2__outlay')
).filter(
    total_outlay__lt=F('salary')
)
from django.db.models import F, Sum
from django.db.models.functions import Coalesce

Model1.objects.filter(
    somefilterlogic
).annotate(
    outlay_total=Coalesce(Sum('model2__outlay'), 0)
).filter(
    total_outlay__lt=F('salary')
)