作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
文档说:
Where the table is backed by a model, the database will handle the ordering. Where this is not the case, the Python cmp function is used and the following mechanism is used as a fallback when comparing across different types: ...
但是,在由模型支持的表(在自定义列上)中,这可能吗?例如
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
当我尝试类似的操作时,该列显示“正常”,但是当我单击列标题进行排序时,出现此错误:
Caught FieldError while rendering: Cannot resolve keyword u'z' into field. Choices are: ...
显然这是因为在数据库表中找不到 z。
有办法解决这个问题吗?
最佳答案
如果您对没有数据库列的属性进行排序,则无法使用查询集。不过,您可以将列表传递到您的表。
假设您的 models.py 如下所示:
from django.db import models
class MyModel(models.Model):
def foo(self):
return something_complex()
你可以有如下所示的tables.py:
import django_tables2 as tables
from .models import MyModel
class MyModelTable(tables.Table):
foo = tables.Column()
class Meta:
model = MyModel
然后在你的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)
关于django - django-tables2 中的非查询集数据排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11025565/
我是一名优秀的程序员,十分优秀!