2011-02-02 33 views
0

我想用django表來創建一個可排序的表格出一些模型。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 

任何想法,使如何工作的呢?

所有列,也是相關關係中的列,都需要進行排序。

回答

1

這適用於我,只要存在相關的SomeInfo或MyInfo實例。如果情況並非如此,則只能提出錯誤。即,表中的每本書都需要附加SomeInfo和MyInfo。

這是因爲如果鏈中的一個屬性不存在,django_tables/models.py:BoundModelRow._default_render中的代碼將引發此錯誤,如果缺少相關實例,則此處爲這種情況:如果不存在相關實例,則Book.myinfo不存在MyInfo存在於Book實例中。

這可能需要被視爲django表中的錯誤。它不應該只是顛倒對象屬性,而應該查看實際定義了哪些數據庫字段的instance._meta。如果它確定存在反向的OneToOne訪問器,但沒有相應的屬性,則它會假定爲空值而不是引發異常。

我已經在這裏報告了這個bug:https://github.com/miracle2k/django-tables/issues/issue/11但是,我不知道什麼時候可以開始工作。修補程序當然是受歡迎的。

+0

是的,事實確實如此。另一種顯示此錯誤的情況是MyInfo上的OneToOneField不是primary_key,並且沒有唯一約束,並且碰巧存在多於一個MyInfo對象的給定書籍。 – miernik 2011-02-03 15:00:41