有没有一种方法可以将列表传递到Django的model.objects.values()中?

时间:2020-08-12 17:18:11

标签: python-3.x django django-models

我只想显示模型中的特定列, 我知道这种方式有效:

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]))
...

请告诉我还有另一种方法,因为这使我无法自拔!

1 个答案:

答案 0 :(得分:1)

您可以使用星号(*)将迭代器解压缩为单个参数:

filtered_transactions = transactionFilter(
        request.GET,
        queryset=Transactionlog.objects.values(*column_list)
)

但是首先使用.values(…) odd 。通常情况下,先获取对象,然后渲染某些列。通过使用.values(…),可以侵蚀模型提供的逻辑层。因此,无法再访问模型上定义的属性等。