2017-02-07 5 views
1

У меня есть таблица отчетов с 10 полями/столбцами. Я хочу разрешить пользователю динамически выбирать, какие столбцы он хочет в отчете. Можно ли это сделать в Django ORMдинамически столбцы столбцов django

Пример

Если пользователь хочет column1 и COLUMN2, то он должен быть, как этот

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

Если пользователь хочет column5, column6, column9, column10, то он должен быть как это

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

Является ли это выполнимо в Джанго ОРМ или я должен использовать курсор или необработанные запросы

+0

Ваш метод выше должен работать нормально, просто получить список столбцов от пользователя каким-то образом. Вы также можете использовать ReportTable.objects.all(), а затем использовать getattr для получения требуемых значений. – Johan

ответ

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.

+0

Спасибо за быстрый ответ. Дело в том, что выбор столбцов динамический. Таким образом, он может выбрать любую комбинацию, и я не могу иметь столько утверждений «если». Если вы видите ответ, который я опубликовал, он принимает список значений, который формируется из пользовательского ввода. –

+0

@PrabhakarShanmugam требуется строка, поэтому есть множество способов передать пользовательский выбор спереди назад. Рад, что вы нашли свой предпочтительный метод. –

0

Я нашел решение этого вопроса. Значения орфографии Django принимают позиционные аргументы.

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

Теперь аргументы могут быть получены от пользователя, используя обычный метод получения или публикации.

0

вы можете передавать переменные в наборе запросов вместо строковой строки. и для выбора пользователем форма может быть заполнена пользователем.

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

OBJ будет ваш ожидаемый результат

и в шаблоне поле множественного ввода можно использовать с таким же именем.

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

Смежные вопросы