2011-09-29 116 views
1

我遇到了使用字符串名稱顯示Django而沒有獲取與該名稱關聯的「對象」的問題。我試圖使用ManyToMany關係,但我無法弄清楚。我得到的錯誤是:Django ManyToMany'str'對象沒有任何屬性

AttributeError at <URL> 
'str' object has no attribute '_default_manager' 

這裏是我的模型設置:

型號/ hood.py

class Hood(models.Model): 
    name = models.CharField(unique=True) 
    restaurants=models.ManyToManyField(Restaurant, through="restaurant_hood_map.RestaurantHoodMap") 

    class Meta: 
     db_table = "hoods" 
     app_label="delivery" 

型號/ restaurant.py

class Restaurant(models.model): 
    name=models.ForeignKey(CompanyName) 
    is_active=models.BooleanField(default=True) 

    class Meta: 
     db_table="restaurants" 
     app_label="delivery" 

個型號/ restuarant_hood_map.py

<import restaurant and hood> 
class RestaurantHoodMap(models.Model): 
    restaurant = models.ForeignKey(Restaurant) 
    hood = models.ForeignKey(Hood) 

    class Meta: 
     db_table="restaurant_hood_map" 
     app_label="delivery" 

現在,我知道是什麼問題.....當我嘗試獲得相關的餐廳關閉吸油煙機,我得到這個錯誤。這是因爲它將「restaurant.Restaurant」視爲字符串值。但是,我認爲它被接受使用字符串值,以避免循環依賴?至少這就是我從文檔認爲:

https://docs.djangoproject.com/en/dev/ref/models/fields/#foreignkey

我也跟着這個例子,它看起來像正是我想要的:

How do I tell Django to not create a table for an M2M related field?

然而,似乎沒有不當你得到一個胡德對象,並做hood.restaurants ....工作吧。

任何幫助將是真棒!

更新:我對模型做了輕微的更改以更準確地顯示發生了什麼。

+0

你在哪裏查詢模型?你可以發佈views.py或你在哪裏做查詢? –

回答

2

好的,我弄明白了。事實證明,當你定義ManyToManyField的「through」參數時,它不能指向不同模塊中的一個類。

所以在我上面的例子中,RestaurantHoodMap類必須被放入「hood.py」模塊,並通過已進行更改,以便它並沒有在名稱中模塊:

restaurants=models.ManyToManyField(Restaurant, through="RestaurantHoodMap") 

現在,我不確定這是否是Django中的錯誤。我認爲你可以用強烈的符號來引用另一個類,但是如果這個類在不同的模塊中,那看起來並不是這樣。

相關問題