2012-02-04 183 views
4

models.pyDjango的多對多關係

from django.db import models 
from django.utils.translation import ugettext as _ 

# Create your models here. 
class Category(models.Model): 
    name   = models.CharField(_(u"Name"), max_length=250) 
    products  = models.ManyToManyField("Product", verbose_name=_(u"Products"), \ 
         blank=True, null=True, related_name="+") 

class Product(models.Model): 
    name   = models.CharField(_(u"Name"), max_length=250)  
    category  = models.ManyToManyField("Category", verbose_name=_(u"Category"), \ 
         blank=True, null=True, related_name="+") 

在管理頁面: m2m relationships

問題:
如何能在models.py productscategory M2M領域之間的關係被設置爲在管理頁面中,因爲它可以在圖片中看到,b2(產品)被標記爲它屬於a2(該類別)。
歡迎任何關於[產品,類別]實施的建議,謝謝。

P.S.
我是Django的新手。對不起我的英語不好。

回答

6

問題是你有兩個 ManyToMany字段。正如你所指出的,當關系在其中一個關係中被設定時,它就不在另一個關係中。

解決方案很簡單:刪除其中一個字段。您只需要關係一側的ManyToManyField。 Django可以自動訪問另一端。因此,如果您在Product模型上保留categories字段,則可以執行my_product.categories.all()以獲取與產品關聯的類別;和my_category.product_set.all()以獲得屬於某個類別的產品。

您還需要刪除related_name="+"屬性:由於您遇到衝突,您可能已將其置入,這應該是一個線索。

+0

也可以從Django文檔中找到進一步的閱讀https://docs.djangoproject.com/zh/dev/topics/db/models/#many-to-many-relationships – Raekkeri 2012-02-04 20:47:07

+0

如果剩下一個m2m字段(例如在類'產品''類別'),如果沒有可供選擇的字段,我怎麼能從'首頁>>目錄>>類別'設置相關產品屬於類別? 我的意思是:創建產品時需要選擇一個類別,並且在創建類別時選擇產品(屬於該類別)。 謝謝。 – ted 2012-02-04 21:23:41

+0

如果沒有ManyToManyField(或其他字段可以訪問),我仍然無法獲得如何將類別應用於產品的問題。簡單地說,如果我可以這樣做:'my_product.category = some_category'我怎樣才能使'my_category.product = some_product'? – ted 2012-02-07 03:56:27