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、チェーン内の属性の1つが存在しない場合、コード内でこのエラーが発生するためです。これは、関連するインスタンスが欠落している場合です。BookのMyInfoが存在しない場合、Book.myinfoは属性として存在しません。実例。

これはおそらくdjango-tablesのバグと見なす必要があります。オブジェクト属性を逆にするだけでなく、データベースフィールドが実際に定義されているinstance._metaを確認する必要があります。リバースOneToOneアクセサーが存在すると判断したが、対応する属性が存在しない場合は、例外を発生させるのではなく、単にnull値を想定します。

これをバグとしてここに報告しました:https ://github.com/miracle2k/django-tables/issues/issue/11しかし、いつ作業を開始するかはわかりません。パッチは大歓迎です。

于 2011-02-03T12:37:51.317 に答える