django-tables2:无法使用order_by对自定义列进行排序

时间:2015-07-01 15:16:46

标签: django django-tables2

我创建了一个新列(issue_number),它只代表表的“pk”,但在模型中检索一个对象:

@property
def issue_number(self):
    return self

当我想用该列订购表时问题就出现了。我得到一个随机顺序,也许这是因为我不是通过整数而是通过对象命令。

如果我鼠标悬停在标题栏上,我得=“?sort = issue_number”但我想要“?sort = id”

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')

2 个答案:

答案 0 :(得分:0)

尝试使用order_by的元组而不是字符串:

order_by=('pk',)

答案 1 :(得分:0)

如果未将'id'声明为字段,则使用'Vendor'order_by = ('id',)不起作用。

所以我建议你以这种方式添加列:

order_by = 'id'

然后将字段'id'添加到'fields'中。例如:

id = tables.Column(visible=False)

我希望它会对某人有用。