0

我正在尝试使用 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

任何想法如何使它工作?

所有列,以及来自相关关系的列,都需要是可排序的。

4

1 回答 1

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但是,我不确定什么时候可以开始处理它。补丁当然是受欢迎的。

于 2011-02-03T12:37:51.317 回答