我有一个包含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中是可行的还是我应该使用游标或原始查询
答案 0 :(得分:0)
您可以选择使用only
和values
。你的例子可以正常工作:
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">