2011-05-25 15 views
5

Tengo 2 aplicaciones que son distintas y no tienen ningún motivo en particular para hablar entre ellas. Esto significa que no quiero importar ningún nombre en ninguna aplicación. Todo el trabajo debe ser dentro de una aplicación de pegamento.Django Cómo usar ManyRelatedManager

me gustaría escribir una aplicación de pegamento que se uniría a modelos particulares a través de un ManyToManyField como:

En los clientes de aplicaciones,

class Customer(models.Model): 
    ... 

en pizzas de aplicaciones,

class Pizza(models.Model): 
    ... 

Entonces Me gustaría escribir la aplicación de venta de pizzas que sería así:

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

    objects = ManyRelatedManager() 

por lo que se puede acceder desde pizzas a los clientes directamente

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

y clientes de la pizza dentro de esta nueva aplicación.

¿Cómo puedo hacer eso?

+0

¿Qué versión de Django estás utilizando? ¿Dónde encontraste este ManyRelatedManager? ¿De dónde lo importas? – jsalonen

Respuesta

4

¿Qué pasa si usaste ManyToManyField para modelo de pizzas vendidas dentro de Modelo de cliente?

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

Además, si desea añadir datos adicionales a su cliente -> las relaciones de pizza, especificar la clase de mapeo con 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) 

simlarly, utilizando related_name debería funcionar bien con ManyToManyFields así . Por ejemplo:

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

+1 para señalar a ManyToManyfield con el parámetro "through". Ese parece ser el enfoque estándar. –

+0

¡Ah, sí, gracias! – jsalonen

+0

Ok, puede que no haya sido específico, no quiero/no puedo usar el nombre pizza en la aplicación del cliente, por lo que no quiero/no puedo usar este enfoque estándar. Podría tener que recurrir a él ... – Narsilou

Cuestiones relacionadas