2011-05-25 105 views
5

我有2個應用程序,是有區別的,並沒有特別的理由互相交談。 這意味着我不想在任何應用程序中導入任何名稱。所有的工作應該是在膠水應用程序內的 。的Django如何使用ManyRelatedManager

我想編寫一個膠水的應用程序,將通過像ManyToManyField加入特定型號:

在應用程序的客戶,

class Customer(models.Model): 
    ... 

在應用比薩餅,

class Pizza(models.Model): 
    ... 

然後我還想寫比薩暢銷的應用程序,會是這樣的:

class PizzaSold(models.Model): 
    customer = models.ForeignKey(related_name='pizzas') 
    pizza = models.ForeignKey(related_name='customers') 

    objects = ManyRelatedManager() 

,所以我可以從客戶直接

pizza = Pizza.objects.all()[0] 
for customer in pizza.customers: 
    #Do something cool 

客戶從比薩這個新的應用程序中訪問的比薩餅。

我該怎麼做?

+0

着Django的版本您使用的?你在哪裏找到這個ManyRelatedManager?你從哪裏進口? – jsalonen 2011-05-25 09:41:17

回答

4

如果你用什麼ManyToManyField到模型需求模型裏面賣比薩餅?

class Customer(models.Model): 
    pizzas_bought = models.ManyToManyField(Pizza) 

另外,如果你想額外的數據添加到您的客戶 - >比薩關係,指定映射類具有through parameter

class Customer(models.Model): 
    pizzas_bought = models.ManyToManyField(Pizza, through=PizzaSold) 

class PizzaSold(models.Model): 
    customer = models.ForeignKey(Pizza) 
    pizza = models.ForeignKey(Customer) 

僑胞,使用related_name應該只是與ManyToManyFields罰款以及。例如:

class Customer(models.Model): 
    pizzas_bought = models.ManyToManyField(related_name='pizzas') 
+0

用於指向具有「through」參數的ManyToManyfield的+1。這似乎是標準方法。 – 2011-05-25 09:48:39

+0

哦,對,謝謝! – jsalonen 2011-05-25 09:54:01

+0

好的,我可能沒有具體說明,我不希望/不能在客戶應用程序中使用名稱比薩餅,這就是爲什麼我不希望/不能使用這種標準方法。我可能不得不訴諸它... – Narsilou 2011-05-25 10:12:23