django - queryset包含每个结果行开头的元素

时间:2014-01-06 18:45:02

标签: django

我有一个返回结果的查询 -

[{'trgjob_id': 22659, 'trgmst_id': 'Tidal - Default Email Abnormal', 'jobmst_id': 10081, 'trgjob_order': 1, 'trgjob_type': 0, 'trgjob_level': 0}, 
{'trgjob_id': 29054, 'trgmst_id': 'CADIS - DMS Email Abnormal ', 'jobmst_id': 10081, 'trgjob_order': 2, 'trgjob_type': 0, 'trgjob_level': 0}, 
{'trgjob_id': 29055, 'trgmst_id': 'CADIS - DMS Email Error ', 'jobmst_id': 10081, 'trgjob_order': 3, 'trgjob_type': 0, 'trgjob_level': 0}]

我希望它做的是在每个结果的开头添加模型名称 - trgjob(这里有3个结果)。我该怎么做呢?

把它放在所有结果的开头很容易我就这么做 -

{'trgjob': trgjobstring.data}

在上面的例子中编辑我希望它看起来像这样 -

['trgjob': 
    {'trgjob_id': 22659, 'trgmst_id': 'Tidal - Default Email Abnormal', 'jobmst_id': 10081, 'trgjob_order': 1, 'trgjob_type': 0, 'trgjob_level': 0},
'trgjob': 
    {'trgjob_id': 29054, 'trgmst_id': 'CADIS - DMS Email Abnormal ', 'jobmst_id': 10081, 'trgjob_order': 2, 'trgjob_type': 0, 'trgjob_level': 0},
'trgjob':
    {'trgjob_id': 29055, 'trgmst_id': 'CADIS - DMS Email Error ', 'jobmst_id': 10081, 'trgjob_order': 3, 'trgjob_type': 0, 'trgjob_level': 0}]

如果语法不正确,我道歉。我实际上并不知道如何看待它,但我知道我希望每行开头的数据。

编辑 -

我有一个自定义序列化程序将这些数据转储到XML中,现在它以我不想要的方式格式化它(无论它是否正确)。

<list-item>
    <list-item>
        <trgjob_id>245970</trgjob_id>
        <trgmst_id>nope</trgmst_id>
        <jobmst_id>34614</jobmst_id>
        <trgjob_order>1</trgjob_order>
        <trgjob_type>0</trgjob_type>
        <trgjob_level>0</trgjob_level>
    </list-item>
    <list-item>
        <trgjob_id>245969</trgjob_id>
        <trgmst_id>blah</trgmst_id>
        <jobmst_id>34614</jobmst_id>
        <trgjob_order>2</trgjob_order>
        <trgjob_type>0</trgjob_type>
        <trgjob_level>0</trgjob_level>
    </list-item>
</list-item>

所以1.我需要list-item作为'trgjob',就像我原来的问题一样。

  1. 我不想要2级列表项。
  2. 我希望XML看起来像这样 -

        <trgjob>
            <trgjob_id>245970</trgjob_id>
            <trgmst_id>nope</trgmst_id>
            <jobmst_id>34614</jobmst_id>
            <trgjob_order>1</trgjob_order>
            <trgjob_type>0</trgjob_type>
            <trgjob_level>0</trgjob_level>
        </trgjob>
        <trgjob>
            <trgjob_id>245969</trgjob_id>
            <trgmst_id>blah</trgmst_id>
            <jobmst_id>34614</jobmst_id>
            <trgjob_order>2</trgjob_order>
            <trgjob_type>0</trgjob_type>
            <trgjob_level>0</trgjob_level>
        </trgjob>
    

    我最接近的是从渲染器中删除“list-item”并更改视图但我目前只知道如何将“trgjob”放在所有结果的开头而不是每个开头之一。

2 个答案:

答案 0 :(得分:1)

假设我已经理解了你的问题,我就是这样做的:

In [1]: qs_results = [{'trgjob_id': 22659, 'trgmst_id': 'Tidal - Default Email Abnormal', 'jobmst_id': 10081, 'trgjob_order': 1, 'trgjob_type': 0, 'trgjob_level': 0}, 
   ...: {'trgjob_id': 29054, 'trgmst_id': 'CADIS - DMS Email Abnormal ', 'jobmst_id': 10081, 'trgjob_order': 2, 'trgjob_type': 0, 'trgjob_level': 0}, 
   ...: {'trgjob_id': 29055, 'trgmst_id': 'CADIS - DMS Email Error ', 'jobmst_id': 10081, 'trgjob_order': 3, 'trgjob_type': 0, 'trgjob_level': 0}]

In [2]: client_results = [{'trgjob':item} for item in qs_results]

In [3]: client_results
Out[3]: 
[{'trgjob': {'jobmst_id': 10081,
   'trgjob_id': 22659,
   'trgjob_level': 0,
   'trgjob_order': 1,
   'trgjob_type': 0,
   'trgmst_id': 'Tidal - Default Email Abnormal'}},
 {'trgjob': {'jobmst_id': 10081,
   'trgjob_id': 29054,
   'trgjob_level': 0,
   'trgjob_order': 2,
   'trgjob_type': 0,
   'trgmst_id': 'CADIS - DMS Email Abnormal '}},
 {'trgjob': {'jobmst_id': 10081,
   'trgjob_id': 29055,
   'trgjob_level': 0,
   'trgjob_order': 3,
   'trgjob_type': 0,
   'trgmst_id': 'CADIS - DMS Email Error '}}]

键位于第2行,它为查询集结果qs_results中的每个dict项添加一个键。

答案 1 :(得分:1)

保持懒惰:

for item in qs_results:
    yield {'trgjob':item}