Как определить в одном и том же представлении классов две или более таблиц с помощью django_tables2 - PullRequest
1 голос
/ 26 апреля 2019

Я безуспешно пытаюсь определить две разные таблицы в моем представлении на основе классов с помощью MultiTableMixin из django_tables2.

Таблицы ссылаются на одну и ту же модель.

tables.py

class PrescriptionsTable(tables.Table):
class Meta:
        #define the model
        model = Prescription
        template_name = 'django_tables2/bootstrap4.html'
        sequence = ("id", "patient","status")

class PrescriptionsTable2(tables.Table):
class Meta:
        #define the model
        model = Prescription
        template_name = 'django_tables2/bootstrap4.html'
        sequence = ("id", "patient","status")

filters.py

class PrescriptionFilter(django_filters.FilterSet):
        patient = django_filters.CharFilter(lookup_expr='icontains')


        class Meta:
            model = Prescription
            fields = ['id','patient','status']

views.py

class PrescriptionListView(LoginRequiredMixin,MultiTableMixin, TemplateView):
    template_name='prescriptions/prescription_list2.html'
    tables = []
    filterset_class = PrescriptionFilter

    def get_context_data(self, **kwargs):
        context = super(PrescriptionListView, self).get_context_data(**kwargs)
        table=Prescription.objects.filter(created__gte=date(2018, 10, 1))
        context['table'] =table
        has_filter = any(field in self.request.GET for field in set(self.filterset_class.get_fields()))
        context['has_filter'] = has_filter
        return context

Как я могуопределить мой взгляд и, в частности, список таблиц для достижения MultiTableMixin?

Эта ссылка на источник не помогла https://django -tables2.readthedocs.io / en / latest /страницы / родовое-mixins.html

1 Ответ

2 голосов
/ 11 июля 2019

У django_tables2 есть MultiTableMixin для добавления более одной таблицы.Создайте MultiTableMixin CBV, затем сделайте набор запросов из разных моделей и сохраните его как переменную.Добавьте таблицы из tables.py в список таблиц и вызовите соответствующую переменную queryset для этих таблиц. Последнее использовать для цикла внутри тела в шаблоне для отображения таблиц.

from .models import model1,model2
from django.shortcuts import render
from django_tables2 import RequestConfig
from django_tables2.views import MultiTableMixin

**views.py**

class PersonTablesView(MultiTableMixin):    
    template_name = 'data/data.html'    

    qs = model1.objects.all()
    qs1 = model2.objects.all()
    tables = [
        TrackTable(qs),
        OTNPHTable(qs1)
    ]

    table_pagination = {
        'per_page': 10
    }

**data.html**

{# data/data1.html #}
{% load render_table from django_tables2 %}
{% load bootstrap4 %}
<!doctype html>
<html>
    <head>
        <title>List of persons</title>
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" />
    </head>
    <body>
        {% for table in tables %}
            {% render_table table 'django_tables2/bootstrap.html' %}
        {% endfor %}
    </body>
</html>
...