The problems you've encountered are caused by LinkColumn
expecting to be bound to a specific attribute in your Item
model, i.e. it is looking for an Item.edit
attribute on your instances.
Since you don't actually have an Item.edit
attribute, ordering over your edit
column makes no sense, and you should mark it as non-orderable:
from django_tables2.utils import A
edit = tables.LinkColumn('item_edit', args=[A('pk')], orderable=False)
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 a render_edit
method to your table class:
def render_edit(self):
return 'Edit'
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:
edit = tables.LinkColumn('item_edit', args=[A('pk')], orderable=False, empty_values=())
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.