2009-12-02 63 views
1

這裏是模型定義:Django的:多對多在線管理視圖錯誤

class ItemBrand(models.Model): 
    name = models.CharField(max_length = 30, unique = True) 

    def __unicode__(self): 
     return self.name 

class WantedItem(models.Model): 
    name = models.CharField(max_length = 120) 
    description = models.TextField() 
    created = models.DateTimeField(auto_now = False, auto_now_add = True) 
    expires = models.DateTimeField(auto_now = False, auto_now_add = False) 
    type = models.ForeignKey(ItemType, related_name = "type wanted") 

    GENDER_CHOICES = (
     (1, 'Male'), 
     (2, 'Female') 
    ) 

    gender = models.IntegerField(choices = GENDER_CHOICES)  
    brands = models.ManyToManyField(ItemBrand, related_name = "wantedbrands", symmetrical = False) 
    colors = models.ManyToManyField(ItemColor) 
    sizes = models.ManyToManyField(ItemSize) 
    creator = models.ForeignKey(User, related_name = "wishlist creator") 

    def __unicode__(self): 
     return self.name 

這裏是AdminModel代碼:

class BrandsInline(admin.TabularInline): 
    model = WantedItem.brands.through 

class WantedItemAdmin(admin.ModelAdmin): 
    list_display = ('name', 'created', 'expires', 'type', 'gender', 'creator')  
    search_fields = ('name', 'description') 
    list_filter = ('created', 'brands',) 
    ordering = ('-created',) 
    inlines = [ 
     BrandsInline, 
    ] 
    exclude = ('brands',) 

這是從Django文檔拉到基本上是正確的,而這裏的錯誤我得到:

'ReverseManyRelatedObjectsDescriptor'對象沒有屬性'through'

我完全喪失了......任何想法?即使我從字面上創建鏈接器表並在模型中設置「through」屬性,我也會得到相同的錯誤。

殘破?

+0

這是「糾正」的代碼,你已經試圖解決這個問題?正如我所看到的,WantedItem.brands是指ItemBrand,並且沒有通過屬性(沒有任何反向列出) – 2009-12-02 01:05:48

+0

請修復空白。 – Alasdair 2009-12-02 01:34:43

+0

@Christian P. - 這也是我最初關於'through'屬性的想法,但事實證明這是用內聯替換多對多小部件的方法。請參閱http://docs.djangoproject.com/en/dev/ref/contrib/admin/#working-with-many-to-many-models – Alasdair 2009-12-02 02:34:16

回答

2

您需要的Django升級到軀幹。

在django開發版本(see docs)中新增了

使用您的模型的簡化版本,我得到了與Django 1.1.1相同的錯誤,但它適用於中繼(修訂版11785)。


順便說一句,你不需要在你ItemBrand多對多字段中指定symmetrical = False。對稱選項僅用於遞歸關係,例如User <-> User

您可能想看看documentation on related names,並考慮將它們重命名爲更合乎邏輯的東西。如果creatorUser對象,並希望得到一組他們創造心願的,如果沒有指定related_name被默認爲

與您所選擇的related_name(當您添加下劃線),這會更改

creator.wishlist_creator.all() 

但我會建議related_name='wishlists',在這種情況下,你可以使用

creator.wishlists.all() 
+0

你可能是對的Alasdair,關於相關的名字和對稱性,那裏的唯一原因是因爲我只是在試驗不同的屬性,看看它是否會讓它變成勾。 而且看起來這個改變確實是在Trunk中,而不是釋放。謝謝您的幫助! – 2009-12-02 14:56:11

+1

此更改在版本1.2以上 – 2010-10-13 20:49:57

1

雖然它可能不是您的錯誤的原因,但related_name屬性中的空格無效,因此我會嘗試先刪除這些空間。

「式通緝令」=> 「type_wanted」

「的心願創造者」=> 「wishlist_creator」

+2

我認爲OP可能誤解了'related_name'屬性的用途。我期望像'wishlist'或'wanteditems'這樣的名字。 – Alasdair 2009-12-02 01:44:21