Django-如何进行多级/菊花链模型查询?

时间:2018-12-06 15:17:33

标签: django django-models django-rest-framework django-views

背景 我需要查询分布在多个表中的数据。我的模型如下:

l = {'node-1':'node-1'}

任务 我正在尝试从前端传递客户ID,并且打算捕获该客户所有帐户所拥有的所有头寸。

如果我运行以下查询,则可以使用SQL进行此操作:

class Clients(models.Model):
    display_name=models.CharField(max_length=70, null=True)
    CLIENTSTATUS=(('unknown', 'unknown'), ('active', 'active'), ('inactive', 'inactive'), ('prospect', 'prospect'), ('coi', 'center of influence'))
    client_status=models.CharField(max_length=25, choices=CLIENTSTATUS, default=CLIENTSTATUS[0][0])        

class Accounts(models.Model):
    nickname=models.CharField(max_length=45, null=True)
    currency=models.CharField(max_length=3, null=True)

class Client_Accounts(models.Model):
    client=models.ForeignKey(Clients, on_delete=models.CASCADE)
    account=models.ForeignKey(Accounts, on_delete=models.CASCADE)

class Positions(models.Model):
    account=models.ForeignKey(Accounts, on_delete=models.CASCADE)
    security_name=models.CharField(max_length=30, null=True)
    cusip=models.CharField(max_length=9, null=True)  
    file_date=models.DateField(null=True)
    market_price=models.DecimalField(max_digits=12, decimal_places=5, blank=True, null=True)
    quantity=models.DecimalField(max_digits=13,decimal_places=3,blank=True, null=True)
    market_value_trade_date=models.DecimalField(max_digits=14,decimal_places=2,blank=True, null=True)

class Securities(models.Model):
    cusip=models.CharField(max_length=9, null=True)
    short_name=models.CharField(max_length=45, null=True)

预期结果 我正在查看的JSON是这样的:

select
    cl.id as client_id,
    cl.display_name,
    ac.id as account_no,
    ac.nickname,  
    pos.cusip,
    sec.short_name,
    pos.market_price,
    pos.market_value_trade_date,
    pos.quantity
from
    datahub_accounts        ac
    join
    datahub_client_accounts cl_ac
    on
        ac.id=cl_ac.account_id
    join
    datahub_clients         cl
    on
        cl_ac.client_id=cl.id 
    join
    datahub_positions       pos
    on
        pos.account_id=ac.id
    join
    datahub_securities      sec
    on
        pos.cusip=sec.cusip
where
    cl.id = 15
    and
    pos.file_date="2018-11-12"
group by
    cl.id,
    cl.display_name,
    ac.id, 
    pos.cusip,
    sec.short_name,
    pos.market_price,
    pos.market_value_trade_date,
    pos.quantity

到目前为止完成 我在views.js中编写了此函数,并且能够遍历客户端的位置并获取所有位置数据。

{
    client_id=15,
    display_name="Client's Name",
    {
        account_no=19,
        account_name="first account"
            {
                cusip="cusip number 1"
                short_name="cusip 1 short name"
                market_price=17.59
                market_value_trade_date=7724.72
                quantity=446.00
            },
            {
                cusip="cusip number 2"
                short_name="cusip 2 short name"
                market_price=66.18
                market_value_trade_date=13897.80
                quantity=210.00
            }
    }
}

问题陈述 但是,我不确定如何:

  1. 将证券查询表(或其他表(帐户,客户)中的任何详细信息)的CUSIP描述拉入相同的查询集中。我所做的工作很像执行子查询操作,但我需要的是联接-用SQL术语来说。
  2. 如何以我提到的格式格式化JSON?我想我需要为此编写一个自定义序列化程序。

0 个答案:

没有答案