Arhn - архитектура программирования

динамически выбирать столбцы django orm

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

Пример

Если пользователю нужны столбец1 и столбец2, он должен быть таким

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

Если пользователю нужен столбец5, столбец6, столбец9, столбец10, он должен быть таким

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

Это выполнимо в django orm или я должен использовать курсор или необработанные запросы

07.02.2017

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

Ответы:


1

У вас есть возможность использовать only и values. ваш пример будет работать нормально:

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

В качестве альтернативы:

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

Я предлагаю использовать objects.only, если вы ищете что-то эквивалентное SELECT column5, column6, column9, column10 FROM.

07.02.2017
  • Спасибо за быстрый ответ. Дело в том, что выбор столбцов динамический. Так что он может выбрать любую комбинацию, и у меня не может быть столько утверждений «если». Если вы видите опубликованный мной ответ, он принимает список значений, который формируется на основе пользовательского ввода. 07.02.2017
  • @PrabhakarShanmugam требуется строка, поэтому есть много способов передать выбор пользователя спереди назад. Рад, что вы нашли свой предпочтительный метод, хотя. 07.02.2017

  • 2

    Я нашел решение этого вопроса. Django orm values ​​принимает позиционные аргументы.

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

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

    07.02.2017

    3

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

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

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

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

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

    07.02.2017
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..