我正在使用django-tables2
来绘制MyModel
的表。 MyModel
的{{1}}字段指定了几个不同的类别。我希望能够覆盖category
,以使表的主要顺序始终为order_by
,而其他选择的内容仅是次要顺序。关于如何执行此操作的任何建议?
答案 0 :(得分:0)
最新论坛。我没有在下面的方法中尝试过。但这可能对我有帮助。在tables.py中创建一个表。然后像往常一样将该表添加到视图中。使用添加的表,您可以尝试django-tables2支持的order_by。
**tables.py**
import django_tables2 as tables
from .models import Person
class PersonTable(tables.Table):
class Meta:
model = Person
template_name = 'django_tables2/bootstrap.html'
**views.py**
from django.shortcuts import render
from django_tables2 import RequestConfig
from .tables import PersonTable
def people_listing(request):
config = RequestConfig(request)
table = PersonTable(Person.objects.all())
table.order_by = 'name'
return render(request, 'data/person.html', {'table': table})
答案 1 :(得分:0)
对于其他遇到此问题的人,我最终得到了答案:
class PersonTable(tables.Table):
def __init__(self, *args, **kwargs):
def generate_order_func(field_name: str) -> Callable:
# django-tables2 stamps any secondary ordering if you have a custom ordering function on any of your
# ordering fields. This adds custom ordering to every field so that name is always the primary
# ordering
def order_func(qs: QuerySet, descending: bool) -> Tuple[QuerySet, bool]:
# Need custom ordering on deal_state (not alphabetical)
qs = qs.order_by("name", ("-" if descending else "") + field_name)
return qs, True
return order_func
for field in self._meta.fields:
setattr(self, f"order_{field}", generate_order_func(field))
super().__init__(*args, **kwargs)
这将覆盖每个字段的排序,以使它由主要排序对象排序。