I'm rendering a queryset with django-tables 2 but since the table is rendered at once I can't manage the following: Firstly, I should mention that the number of rows of the table is different with each queryset so I don't know the exact number of them in advance. What I need, is to have one button per row that loads the retrieved object inside the fields of a form. I render the table with the default way:
{% load render_table from django_tables2 %}
{% render_table table %}
When I try to iterate over the rows of the tables I get the error 'table is not iterable'.
So how can I add one button per row?
You can create in your table a template column, this will render something, a button for example:
class MyTables(tables.Table):
...
my_column = tables.TemplateColumn(verbose_name=_('My Column'),
template_name='app/my_column.html',
orderable=False) # orderable not sortable
In the template my_column the row is in the variable record:
{{ record.my_field }}
Example: actions = TemplateColumn(template_code='<a href="{% url "review_detail" record.id %}" class="btn btn-success">View') this line of code adds a column to your table and adds the html content you want. To pass the id to your route, just call the "record" object
import django_tables2 as tables
from django_tables2 import TemplateColumn
from .models import Review, ReviewCategory, ReviewLog, ItemCategory
class ReviewTable(tables.Table):
acciones = TemplateColumn(template_code='<a href="{% url "review_detail" record.id %}" class="btn btn-success">Ver</a>')
class Meta:
model = Review
exclude = (
'id',
'assigned',
'parent',
'created_at',
'updated_at'
)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With