我无法通过它的模型属性对表格进行排序。我知道我应该在列中设置访问者,以便<iframe src="http://www.w3schools.com/html"></iframe>
知道要处理哪个字段,但它不起作用。
这是表格:
django-tables2
这是扫描模型:
class ScansTable(tables.Table):
site = tables.columns.Column(accessor='occurence.site', verbose_name='Site')
url = tables.columns.TemplateColumn("""<a href="{{ record.occurence.url }}">{{ record.occurence.url|truncatechars:20 }}</a>""",
accessor='occurence.url', verbose_name='Url')
price = tables.columns.TemplateColumn(u"""{{ record.price }} €""")
date = tables.columns.Column(accessor='date',order_by='date')
time = tables.columns.Column(accessor='time',order_by='time')
class Meta:
model = Scan
fields = ('date', 'time', 'site', 'url', 'valid', 'price')
attrs = {'id': 'cans_table',
'class': 'table',}
观点:
class Scan(models.Model):
occurence = models.ForeignKey('Occurence', related_name='scans')
datetime = models.DateTimeField()
price = models.DecimalField(max_digits=20,decimal_places=2,null=True,blank=True,verbose_name='Price')
valid = models.BooleanField(default=True,verbose_name='Valid')
def __unicode__(self):
return u'{} {} {} {}'.format(self.occurence, self.datetime, self.price, u'OK' if self.valid else 'NOK')
@property
def date(self):
return self.datetime.date()
@property
def time(self):
return self.datetime.time()
当我不想对表格进行排序时,表格正在正确呈现。当我点击时间(例如)时,它会返回:
无法解析关键字u&#39; time&#39;进入田野。选择是:datetime, groups,id,occurence,occurence_id,price,valid
你知道问题出在哪里吗?
答案 0 :(得分:0)
奇怪的是什么类型的产品?你展示了Occurence模型以及它在视图中的价值
答案 1 :(得分:0)
似乎模型的已定义属性/方法不可用于查询集内的排序/过滤。我不完全理解为什么会这样。解决方案是不要将date
和time
定义为Scan
模型上的属性,而是将它们注释到用于填充数据的查询集。
from django.db import models
def scans(request):
...
scans = Scan.objects.filter(occurence__product=product).annotate(
date=models.F('datetime__date'),
time=models.F('datetime__time')
)
...
请参阅有关字段查找的文档here。此外,您可以对这些字段使用tables
特定列 - 请注意,现在结果已经在查询集中,您无需定义访问者:
class ScansTable(tables.Table):
...
date = tables.DateColumn()
time = tables.TimeColumn()
...