Добавление строк и столбцов в таблицу HTML с помощью Django

У меня возникла проблема. Рассмотрим таблицу HTML, в ней есть строки и столбцы. Я хочу добавить новую строку или столбец, когда мне это нужно, и я хочу, чтобы это была запись в базе данных. И я хочу сделать это с помощью django. Что мне делать? Я думаю, что мне нужно использовать django_table2, но я не знаю как. Я буду рад, если вы напишите пример кода. Спасибо)

Допустим, у вас есть модель, вы можете получить список объектов следующим образом;

def my_view(request):
    context = {'object_list':MyModel.objects.all()}
    return render(request, 'mypage.html', context)

Затем в шаблоне вы можете сделать несколько вещей для создания таблиц: Либо полностью сгенерировать таблицу с помощью Django, например так:

{% for object in object_list %}
    <tr>
        <td>{{object.data}}</td>
        <td>{{object.data}}</td>
        <td>{{object.data}}</td>
    </tr>
{% endfor %}

Это создаст новую строку для каждого объекта.

Другим решением является:

{% for object in object_list %}
    //Create row for every object
    <tr>
        {% for data in object.get_field_data %}
            // Create column for every field in object
            <td>{{data}}</td>
        {% endfor %}
    </tr>
{% endfor %}

Где get_field_data будет определен как метод на модели, как например:

def get_field_data(self):
    datalist = []
    for field in self._meta.get_fields():
        datalist.append(getattr(self, field.name))
    return datalist

Вы можете даже реализовать некоторые проверки на get_field_data, например, исключить поля.

def get_field_data(self):
    datalist = []
    for field in self._meta.get_fields():
        if field.name != 'id':
            datalist.append(getattr(self, field.name))
    return datalist

Вам не нужно использовать какой-либо внешний пакет, вы можете легко сделать это с помощью Django Template Language

Вот пример кода, использующего ListView

# views.py

from django.views.generic import ListView

class ItemListView(ListView):
    template_name = 'mytable.html'
    model = MyModel
    context_object_name = 'item_list'
<!-- mytable.html -->
...
<table>
    <thead>
        <tr>
            <th>Name</th>
            <th>Amount</th>
        </tr>
    </thead>
    <tbody> 
        {% for item in item_list %}
            <tr>
                <td>{{ item.name }}</td>
                <td>{{ item.amount }}</td>
            </tr>
        {% endfor %}
    </tbody>
</table>
...

Таким образом, ваш шаблон будет иметь доступ к списку объектов item_list, который в точности соответствует записям в таблице базы данных. Вы можете циклически обращаться к этому списку/набору с помощью цикла for, который автоматически обернет содержимое в html, необходимый для того, чтобы сделать его частью таблицы.

Вернуться на верх