我正在尝试使用django-tables从一些模型中创建一个可排序的表。
http://elsdoerfer.name/docs/django-tables/types/models.html#spanning-relationships说我可以跨越人际关系,但我很难“倒退”。
以下是我的模型和表格:
class Book(Model):
isbn = ISBNField("ISBN", primary_key=True, editable=True, blank=True, null=False)
class SomeInfo(Model):
book = OneToOneField(Book, primary_key=True, editable=False, blank=False, null=False, verbose_name = _('ISBN'), related_name='someinfo')
title = CharField(_("Title"), editable=False, blank=False, null=True, max_length=250)
class MyInfo(Model):
book = OneToOneField(Book, primary_key=True, editable=False, blank=False, null=False, verbose_name = _('ISBN'), related_name='myinfo')
average_price = DecimalField(_("Average price"), editable=False, null=True, max_digits=6, decimal_places=2)
class Query(Model):
book = ForeignKey(Book, editable=True, blank=True, null=True, verbose_name = _('ISBN'))
max_price = DecimalField(_('Maximum price'), null=True, max_digits=6, decimal_places=2)
class MyTable(ModelTable):
my_average_price = tables.Column(data="book__myinfo__average_price")
my_title = tables.Column(data="book__someinfo__title")
class Meta:
model = Query
当尝试在模板中使用例如my_average_price时,我收到此错误:
TemplateSyntaxError at /list/
Caught ValueError while rendering: Could not resolve myinfo from book__myinfo__average_price
任何想法如何使它工作?
所有列,也是相关关系中的列,都需要是可排序的。
答案 0 :(得分:1)
这适用于我,前提是存在相关的SomeInfo或MyInfo实例。只有在不是这种情况时才应该引发错误。即,表中的每本书都需要附加SomeInfo和MyInfo。
这是因为如果链中的某个属性不存在,django_tables/models.py:BoundModelRow._default_render
中的代码将引发此错误,如果缺少相关实例,则会出现这种情况:Book.myinfo不存在如果Book实例不存在MyInfo,则为属性。
这可能需要被视为django-tables中的错误。它应该查看实际定义了数据库字段的instance._meta,而不仅仅是反转对象属性。如果它确定存在反向OneToOne访问器,但没有相应的属性,则它将假设为空值而不是引发异常。
我在此处将此报告为错误:https://github.com/miracle2k/django-tables/issues/issue/11但是,我不确定何时可以开展工作。补丁肯定是受欢迎的。