I am trying to add a extra column to one of my tables, that adds url to another page.
My Table:
class ItemTable(tables.Table):
edit = tables.LinkColumn('item_edit', args=[A('pk')])
class Meta:
model = Item
fields = ('name', 'slot', 'klass', 'rarity', 'price')
my urls:
url(r'^admin/item/edit/(?P<item_id>\d+)/$', views.item_edit, name='item_edit')
Now with this, i get my table, but the last column (edit) only has dashes + the page crashes when i click the title.
i have been looking at http://django-tables2.readthedocs.org/en/latest/#django_tables2.columns.LinkColumn and im not sure where i go wrong
To have the link properly formatted and with a link text of your choice, you can do the following in the table class:
Where 'edit' is the name of the url.
The problems you've encountered are caused by
LinkColumn
expecting to be bound to a specific attribute in yourItem
model, i.e. it is looking for anItem.edit
attribute on your instances.Since you don't actually have an
Item.edit
attribute, ordering over youredit
column makes no sense, and you should mark it as non-orderable:The text of the link itself would come from the value of the
Item.edit
attribute, which you don't have, so you will need to provide it yourself by adding arender_edit
method to your table class:You can replace the
'Edit'
string with whatever you want displayed in that column.Update: As suggested by @SunnySydeUp, you also need to specify
empty_values=()
for the column, in order to get its value rendered:References:
http://django-tables2.readthedocs.org/en/latest/pages/order-by-accessors.html#specifying-alternative-ordering-for-a-column http://django-tables2.readthedocs.org/en/latest/pages/custom-rendering.html#table-render-foo-methods
Disclaimer: This answer is based on the
django-tables2
documentation and source code, and hasn't been tested on an actual Django application.I create clickable links in extra columns with
It's not necessary to override the render method; the 'text' parameter changes the text of the link from 'none' to 'Edit', for example.