【问题标题】:django-tables2 cannot sort on certain fieldsdjango-tables2 无法对某些字段进行排序
【发布时间】:2017-07-15 06:25:47
【问题描述】:

我有一个定义如下的 Django 模型:

class DummyModel(models.Model):
    name = models.CharField(max_length=100, name='Name')
    description = models.CharField(name='Description', max_length=150)
    time_points = models.PositiveIntegerField(name="Time Points")
    more_text = models.CharField(max_length=100, name="More Text")

    class Meta:
        db_table = "dummy"

我想稍后做一些自定义,所以我也有一个表类:

class DummyTable(tables.Table):
    class Meta:
        model = DummyModel
        attrs = {'class': 'paleblue'}

我有一个对应的视图如下:

@login_required(login_url="login/")
def review(request):
    table = DummyTable(DummyModel.objects.all())
    RequestConfig(request).configure(table)
    return render(request, 'review.html', {'reviews': table})

最后,我使用以下方法在我的模板中渲染它:

{% block content %}
    {% load static %}
    {% load render_table from django_tables2 %}
    <div class="function-container">
        {% render_table reviews %}
    </div>
{% endblock %}

现在效果很好,但是当我尝试对 time Points 列进行排序(通过单击列标题)时,会出现错误:

Invalid order_by arguments: [u'Time Points']
Request Method: GET
Request URL:    http://127.0.0.1:8000/review/?sort=Time+Points
Django Version: 1.10.5
Exception Type: FieldError
Exception Value:    
Invalid order_by arguments: [u'Time Points']

但是,如果我将浏览器指向http://127.0.0.1:8000/review/?sort=time_points,则可以。因此,以某种方式未传递正确的字段名称。我尝试更改 name 并将 verbose_namne 字段添加为:

time_points = models.PositiveIntegerField(name="time_points", verbose_name="Time Points")

但是,这会在 no such column: dummy.time_points 中返回

【问题讨论】:

    标签: django django-models django-templates django-views django-tables2


    【解决方案1】:

    我想出了一个办法,那就是覆盖我的table 类中的列。所以,现在我的模型看起来像:

    class DummyModel(models.Model):
        name = models.CharField(max_length=100)
        description = models.CharField(max_length=150)
        time_points = models.PositiveIntegerField()
        more_text = models.CharField(max_length=100)
    
        class Meta:
            db_table = "dummy"
    

    在我的自定义 table 类中,我有:

    class DummyTable(tables.Table):
        #Override here to change the column header text 
        time_points = tables.Column(verbose_name='Time Points')
        more_text = tables.Column(verbose_name='More Text')
    
        class Meta:
            model = DummyModel
            attrs = {'class': 'paleblue'}
    

    现在排序按预期进行。

    【讨论】:

      猜你喜欢
      • 2010-12-22
      • 2017-02-27
      • 2018-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-18
      相关资源
      最近更新 更多