Django:通过对2个表执行Join的原始sql查询创建模型

时间:2018-09-06 08:58:22

标签: mysql django

所以我有一个用于报告的mysql数据库。我们正在尝试创建一个查询该数据库的API,以查找存入一定数量的客户:

查询看起来像这样:

SELECT t.`LOGIN`,SUM(t.PROFIT) AS total_deposits,u.`phone` 
FROM mt4_trades t join mt4_users u on t.LOGIN = u.LOGIN
where t.CMD=6 and t.COMMENT like 'DP%' 
and u.`group` like 'FX%'
group by t.`LOGIN`
having sum(t.PROFIT)>10000;

我执行了 python manage.py inspectdb 以便使用这些字段创建模型。问题在于这些字段来自不同的表。

这是我的模型的样子:

from django.db import models

# Create your models here.
class BigDeposit(models.Model):
    login = models.IntegerField(db_column='LOGIN', primary_key=True)  # Field name made lowercase.
    group = models.CharField(db_column='GROUP', max_length=16)  # Field name made lowercase.
    profit = models.FloatField(db_column='PROFIT')  # Field name made lowercase.
    phone = models.CharField(db_column='PHONE', max_length=32)  # Field name made lowercase.

    class Meta:
        managed = False
        db_table = '?????'

第一个问题:在这种情况下,我应该在db_table字段中输入什么?

第二个问题:如何执行原始查询以从中创建“ BigDeposit”查询集?

谢谢

1 个答案:

答案 0 :(得分:0)

  

是的,为什么不呢?如果您有贸易和用户模型,请使用外键   他们之间,您的查询最终像   Trade.objects.values_list('login','user__phone')。filter(cmd = 6,   comment__startswith ='DP',   user__group__startswith ='FX')。annotate(profit_sum = Sum('profit'))。filter(profit_sum__gte = 10000)。

行得通!谢谢!