动态选择django orm列

时间:2017-02-07 10:30:23

标签: python django orm

我有一个包含10个字段/列的报告表。我想允许用户在报告中动态选择他想要的列。可以在Django ORM中完成吗

实施例

如果用户想要column1和column2,那么它应该是这样的

obj = ReportTable.objects.values('column1', 'column2')

如果用户想要column5,column6,column9,column10那么它应该是这样的

obj = ReportTable.objects.values('column5', 'column6', 'column9', 'column10')

这在django orm中是可行的还是我应该使用游标或原始查询

3 个答案:

答案 0 :(得分:0)

您可以选择使用onlyvalues。你的例子可以正常工作:

ReportTable.objects.values('column5', 'column6', 'column9', 'column10')

可替换地:

ReportTable.objects.only('column5', 'column6', 'column9', 'column10')

如果您正在寻找与objects.only等效的内容,建议您使用SELECT column5, column6, column9, column10 FROM

答案 1 :(得分:0)

我找到了这个问题的解决方案。 Django orm值需要位置参数。

args = ['column5', 'column6', 'column9', 'column10']
obj = ReportTable.objects.values(*tuple(args))

现在可以使用常规的get或post方法从用户那里获取args。

答案 2 :(得分:0)

您可以在queryset中传递变量而不是硬编码字符串。对于用户选择,表单可以由用户填写。

choices = request.POST.getlist('choices')
obj = ReportTable.objects.values(*choices)

obj将是您的预期输出

并且在模板中,多个输入字段可以使用相同的名称。

<input name="choices">
<input name="choices">
<input name="choices">