2011-05-25 7 views
5

Farklı olan 2 uygulamaya sahibim ve birbirleriyle konuşmak için belirli bir neden yok. Bu, her iki uygulamada da herhangi bir ad almak istemiyorum. Tüm iş bir tutkal uygulaması içinde olmalıdır.Django ManyRelatedManager nasıl kullanılır

Ben böyle bir ManyToManyField aracılığıyla belirli modellere katılacak bir tutkal uygulaması yazmak istiyorum:

uygulama müşteriler ise

, uygulama pizzalar ise

class Customer(models.Model): 
    ... 

,

class Pizza(models.Model): 
    ... 

Sonra Bu gibi gidecek pizza satış uygulamasını yazmak istiyorum:

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

    objects = ManyRelatedManager() 

yüzden bu yeni uygulama pizzadan müşterilerden doğrudan

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

ve müşterilerden pizzalar erişebilirler.

Bunu nasıl yapabilirim?

+0

Hangi sürümü Django kullanıyorsunuz? Bu ManyRelatedManager'ı nereden buldunuz? Onu nereden ithal ediyorsunuz? "Through" parametresiyle ManyToManyfield'a işaret etmek için – jsalonen

cevap

4

Müşteri modelinde satılan pizzaları modellemek için ManyToManyField'u kullanırsanız ne olur? Ayrıca

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

bunu müşterinizin için ekstra veri eklemek isterseniz -> pizza ilişkileri through parameter ile haritalama Class belirtin:

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

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

Simlarly, related_name kullanarak yanı ManyToManyFields ile sadece iyi çalışması gerekir . Örneğin:

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

+1. Bu standart yaklaşım gibi görünüyor. –

+0

Doğru, teşekkürler! – jsalonen

+0

Tamam, özel olmayabilir, müşteri uygulamasında pizza ismini kullanmak istemiyorum/kullanamıyorum, bu yüzden bu standart yaklaşımı kullanmak istemiyorum/kullanamıyorum. Ona başvurmak zorunda kalabilirim ... – Narsilou