Joh*_*ers 11 django django-tables2
文档说:
如果表由模型支持,数据库将处理排序.如果不是这种情况,则使用Python cmp函数,并且在比较不同类型时使用以下机制作为回退:...
但是,这可能在一个表是由模型的支持下,在自定义列?例如
class MyModel(models.Model):
x = models.IntegerField()
y = models.IntegerField()
def z(self):
return x+y
class MyTable(tables.Table):
z = tables.Column()
class Meta:
model = MyModel
Run Code Online (Sandbox Code Playgroud)
当我尝试这样的事情时,列显示OK,但是当我点击列标题进行排序时,我收到此错误:
渲染时捕获FieldError:无法将关键字u'z'解析为字段.选择是:......
显然这是因为在数据库表中找不到z.
有没有解决的办法?
如果您对没有数据库列的属性进行排序,则无法使用查询集。不过,您可以将列表传递到您的桌子上。
假设你的 models.py 看起来像这样:
from django.db import models
class MyModel(models.Model):
def foo(self):
return something_complex()
Run Code Online (Sandbox Code Playgroud)
您可以拥有如下所示的tables.py:
import django_tables2 as tables
from .models import MyModel
class MyModelTable(tables.Table):
foo = tables.Column()
class Meta:
model = MyModel
Run Code Online (Sandbox Code Playgroud)
然后在你的views.py中:
from django_tables2.config import RequestConfig
from django.core.paginator import InvalidPage
from django.shortcuts import render
def view_my_models(request):
# use a list so django_tables2 sorts in memory
my_models = list(MyModel.objects.all())
my_models_table = MyModelTable(my_models)
RequestConfig(request).configure(my_models_table)
try:
page_number = int(request.GET.get('page'))
except (ValueError, TypeError):
page_number = 1
try:
my_models_table.paginate(page=page_number, per_page=10)
except InvalidPage:
my_models_table.paginate(page=1, per_page=10)
template_vars = {'table': my_models_table}
return render(response, "view_my_models.html", template_vars)
Run Code Online (Sandbox Code Playgroud)
还有一个讨论此问题的公开票证。
| 归档时间: |
|
| 查看次数: |
2101 次 |
| 最近记录: |