Django-filter AND Django-tables2 Совместимость CheckBoxColumn

Я хочу иметь столбец флажка в моей возвращаемой таблице через Django-фильтр, затем выбирать определенные строки с помощью флажка, а затем что-то делать с этими строками.

Это Django-filter: django-filter.readthedocs.io/en/1.1.0 Это пример столбца флажка, используемого в Django-tables2: stackoverflow.com/questions/10850316/…

Мой вопрос: могу ли я использовать столбец флажка для таблицы, возвращаемой через фильтр Django?

Спасибо


person FortranMan    schedule 12.12.2017    source источник
comment
пожалуйста, вставьте правильно отформатированный код, используйте пример, свяжите его, укажите ожидаемый результат, ошибку, что угодно, кроме текста.   -  person 8-Bit Borges    schedule 13.12.2017
comment
Я уже указал ожидаемый результат. Это третье предложение в моем вопросе. Вам действительно нужен мой рабочий код фильтра django?   -  person FortranMan    schedule 13.12.2017
comment
все, что я говорю, это то, что SO ожидает вопросов с кодом. длинные вопросы с простым текстом выглядят привередливыми. возможно, вы могли бы провести исследование в другом месте и переместить его в SO, когда речь идет о реальном фрагменте.   -  person 8-Bit Borges    schedule 13.12.2017
comment
Это фильтр Django: django-filter.readthedocs.io/en/1.1.0 Это пример использования столбца флажка в Django-tables2: stackoverflow.com/questions/10850316/ Могу ли я использовать столбец флажка для таблицы, возвращенной через фильтр Django? Это своего рода вопрос «да» или «нет».   -  person FortranMan    schedule 13.12.2017
comment
Боюсь, я не могу помочь вам в этом вопросе. Я просто просматривал ваш вопрос. Я предлагаю вам отредактировать свой вопрос и вставить предоставленные ссылки, чтобы повысить вероятность получения ответа. удачи.   -  person 8-Bit Borges    schedule 13.12.2017


Ответы (2)


Полный рабочий код:

filters.py:

from project_django.models import SomeModel
import django_filters

class UserFilter(django_filters.FilterSet):

    class Meta:
        model = SomeModel
        fields = ['jobnumber', ]

views.py:

def custom_table(request):

    user_list = SomeModel.objects.all()

    data = request.GET.copy()

    if len(data) == 0:
        data['jobnumber'] = 0

    user_filter = UserFilter(data, queryset=user_list)

    table1 = JobTable(user_filter.qs)

    # WORKING: custom table with checkbox
    RequestConfig(request).configure(table1)

    # WORKING: custom table with checkbox
    return render(request, 'index.html', {'table1': table1, 'filter': user_filter})

tables.py:

import django_tables2 as tables
from .models import SomeModel


class JobTable(tables.Table):

    selection = tables.CheckBoxColumn(accessor='pk')
    #jobnumber = tables.Column()
    class Meta:
        model = SomeModel

index.html:

{% load widget_tweaks %}
{% block content %}

  <form method="get">
    <div class="well">
      <h4 style="margin-top: 0">Filter</h4>
        <div class="row">
        <div class="form-group col-sm-4 col-md-3">
        {{ filter.form.as_p }}
        <button type="submit">Search</button>
        </div>
        </div>
      </div>
    </div>
  </form>

  <form action="roll.html" method="post">
      {% render_table table1 %}
      <input type="submit">

  </form>
person FortranMan    schedule 19.12.2017
comment
В ваших примерах вы передаете filter.qs в render_table. Это означает, что вы получаете таблицу, сгенерированную из ваших моделей django. Чтобы добавить настраиваемый столбец в таблицу, необходимо создать настраиваемый объект таблицы. Это объясняется в руководстве. Экземпляр таблицы должен войти в контекст, а затем передаться {% render_table %} - person Jieter; 20.12.2017
comment
Является ли мой пользовательский объект таблицы полной таблицей или в мою модель добавляется только один столбец? Если это полная таблица, то я должен передать свой отфильтрованный набор запросов в этот объект таблицы, да? Я ознакомился с учебными пособиями по django-tables2, но это очень простой пример без каких-либо признаков передачи чего-либо, кроме простой модели. - person FortranMan; 22.12.2017
comment
Столбец флажка теперь виден в моей пользовательской таблице, но я пытаюсь получить данные django-filter в таблицу, а не в полную модель; Я опубликую полный рабочий код, если он заработает. Я не уверен, редактирую ли я tables.py или views, но я пытаюсь. - person FortranMan; 22.12.2017
comment
Привет @Jieter, добился некоторого прогресса, но отредактировал мой ответ выше - person FortranMan; 29.12.2017
comment
Привет @FortranMan, не уверен, в чем именно заключается твой вопрос. Ваш код выглядит хорошо. Я не уверен, каково ваше намерение с копированием и изменением GET dict. Можете ли вы объяснить, чего вы хотите добиться там? - person Jieter; 29.12.2017
comment
@Jieter, текстовое поле django-filter, которое раньше присутствовало и функционировало (без пользовательской таблицы), исчезло. Когда я просматриваю исходный код, его тоже нет. Я добавил ссылку на скриншот в свой пост выше. - person FortranMan; 29.12.2017
comment
Ах, вам нужно добавить фильтр в контекст, в настоящее время table1 — это переменная, используемая в опубликованном вами шаблоне. - person Jieter; 30.12.2017
comment
Да, но такие вещи, как контекст, для меня все еще неясны. Я думаю, что это неправильно: '{{ Table1.form.as_p }}', но это правильно: '{% render_table table1 %}' - person FortranMan; 30.12.2017
comment
Теперь это работает хорошо! Большое спасибо! Итак, как мне отметить это как ответ? Кроме того, я должен голосовать или что-то в этом роде? - person FortranMan; 30.12.2017
comment
Контекст — это третий параметр, который вы передаете в render(). Это список переменных, которые будут доступны в шаблоне. - person Jieter; 30.12.2017

Что делает django-filter с точки зрения django-tables2, так это предоставление другого (отфильтрованного) набора запросов. django-tables2 не заботится о том, кто составил набор запросов, он просто перебирает его и отображает строки, используя модели из набора запросов.

Таким образом, если вы установите флажок для столбца таблицы или нет, или используете django-filter или нет, django-tables2 просто отобразит любой полученный набор запросов.

Если вы хотите использовать проверенные записи для какого-то пользовательского фильтра, вам придется вручную кодировать, это не поддерживается из коробки.

Краткий ответ: да, вы можете использовать django-tables2 с CheckboxColumn вместе с django-filter.

person Jieter    schedule 15.12.2017
comment
Спасибо, я разместил второй комментарий, но не знал, куда его поместить. Это мой первый пост здесь, поэтому я пытаюсь во всем разобраться. - person FortranMan; 20.12.2017