我只想显示模型中的特定列, 我知道这种方式有效:
Transactionlog.objects.values('column1','column2','column3')
但是我有一个列表需要填充,我使用的是Django过滤器,因此我的代码如下所示:
filtered_transactions = transactionFilter(
request.GET,
queryset=Transactionlog.objects.values('column1','column2'))
我的问题是我有一个通过单独模型填充的动态列表,我需要将此列表传递到values()中,但是根据我的判断,它并不需要列表。
到目前为止我的解决方案(对于大型数据集...如此之小,这是可怕的:
if len(column_list) == 1:
filtered_transactions = transactionFilter(
request.GET,
queryset=Transactionlog.objects.values(column_list[0]))
if len(column_list) == 2:
filtered_transactions = transactionFilter(
request.GET,
queryset=Transactionlog.objects.values(column_list[0],column_list[1]))
...
请告诉我还有另一种方法,因为这使我无法自拔!
答案 0 :(得分:1)
您可以使用星号(*
)将迭代器解压缩为单个参数:
filtered_transactions = transactionFilter(
request.GET,
queryset=Transactionlog.objects.values(*column_list)
)
但是首先使用.values(…)
是 odd 。通常情况下,先获取对象,然后渲染某些列。通过使用.values(…)
,可以侵蚀模型提供的逻辑层。因此,无法再访问模型上定义的属性等。