2015-07-01 2 views
0

Я создал новый столбец (ISSUE_NUMBER), который представляет только «рк» таблицы, но в модели возвращает объект:Джанго-tables2: Невозможно отсортировать пользовательский столбец, используя order_by

@property 
def issue_number(self): 
    return self 

Проблемы приходит, когда я хочу заказать таблицу с этим столбцом. Я получаю случайный порядок, возможно, это потому, что я заказываю не через целое число, а через объект. «? Сортировать = ISSUE_NUMBER»

Если я мыши над заголовке столбца, я получаю = но я хотел бы иметь «? Сортировать = идентификатор»

class IssueNumberColumn(tables.Column): 
    def render(self, value): 
     obj = value 
     if obj.status.upper() in ['RESOLVED', 'INVALID']: 
      return mark_safe('<a href="%s"><s>#%s</s></a>' % (reverse('issues.views.view', args=(obj.pk,)), obj.pk)) 
     else: 
      return mark_safe('<a href="%s">#%s</a>' % (reverse('issues.views.view', args=(obj.pk,)), obj.pk)) 

class IssueTable(tables.Table): 
    issue_number = IssueNumberColumn(verbose_name="ID", order_by='pk') 
    #id = tables.Column(accessor='pk') 

    def render_id(self, value): 
     return mark_safe('<a href="%s">#%s</a>' % (reverse('issues.views.view', args=(value,)), value)) 

    def render_title(self, value, record): 
     return mark_safe('<a href="%s">%s</a>' % (reverse('issues.views.view', args=(record.id,)), value)) 

    def render_created(self, value): 
     #without doing this, it shows American date formatting. 
     return value 

    class Meta(object): 
     model = Issue 
     fields = ('issue_number', 'title', 'product', 'type', 'priority', 'status', 'created') 
     attrs = {'class': 'table table-bordered'} 
     empty_text = _('No records found') 

я делал много попыток, но ничего помогает:

issue_number = IssueNumberColumn(verbose_name="ID", order_by='pk') 
    issue_number = IssueNumberColumn(verbose_name="ID", order_by='id') 

ответ

0

Попробуйте использовать кортеж для order_by вместо строки:

order_by=('pk',) 
+0

он еще не работает. – Ruben

+0

Извините, у меня нет других предложений. Надеюсь, вы выясните, в чем проблема. – Alasdair

0

Использование order_by = ('id',) или order_by = 'id' не работает, если 'id' не объявлен в поля.

Так что я рекомендую вам добавить колонку таким образом:

id = tables.Column(visible=False) 

, а затем добавить поле «ID» в «полях». Пример:

fields = ('id', 'title', 'description') 

Надеюсь, это будет полезно кому-то.

Смежные вопросы