django-tables2 无法对某些字段进行排序
django-tables2 cannot sort on certain fields
我有一个 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"
我想稍后做一些定制,所以我也有一个 table class:
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
列进行排序时(通过单击 header 列),出现错误:
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")
但是,这个 returns 在 no such column: dummy.time_points
我想出了一个方法来做到这一点,那就是覆盖我的 table
class 中的列。所以,现在我的模型看起来像:
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 中,我有:
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'}
现在排序按预期进行。
我有一个 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"
我想稍后做一些定制,所以我也有一个 table class:
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
列进行排序时(通过单击 header 列),出现错误:
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")
但是,这个 returns 在 no such column: dummy.time_points
我想出了一个方法来做到这一点,那就是覆盖我的 table
class 中的列。所以,现在我的模型看起来像:
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 中,我有:
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'}
现在排序按预期进行。