django:从对两个表执行连接的原始sql查询创建模型

pkln4tw6  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(277)

所以我有一个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\u表字段中输入什么。
第二个问题:如何执行一个原始查询来创建一个“bigdeposit”查询集?
谢谢您

n53p2ov0

n53p2ov01#

是的,为什么不呢?如果您有trade和user模型,并且它们之间有一个外键,那么您的查询将类似于trade.objects.values\u list('login','user\u phone').filter(cmd=6,comment\u startswith='dp',user\u group\u startswith='fx').annotate(profit\u sum=sum('profit').filter(profit\u sum\u gte=10000)。
成功了!谢谢!

相关问题