2009-11-22 10 views
6

Digamos que tienen una estructura de clases que se define a continuación:únicos valores de campo y las relaciones de muchos a muchos

Class Item(models.Model): 
    ... 
    price = models.IntegerField() 
    upc = models.IntegerField() 
    ... 

Class Store(models.Model): 
    ... 
    inventory = models.ManyToManyField(Item) 
    ... 

Básicamente quiero almacenar modelos tengan acceso al mismo inventario. Sin embargo, el valor del precio en el modelo del artículo será único para cada tienda que se vincule con él. p.ej. Podría tener una instancia del modelo de artículo llamada bicicleta a la que todas las tiendas tendrán acceso. Para todas las tiendas, el upc (código de barras) será el mismo, pero el precio será diferente para cada tienda. ¿Hay alguna forma de implementar esa relación usando esta estructura de clase?

Respuesta

7

Use una tabla explícita through. Ver the documentation.

+0

Gracias por la respuesta. Creo que tiene sentido, pero ¿puedes explicar cómo puedo estar seguro de que cada precio será único para cada tienda? – buken

+0

Esto debería ser evidente en el ejemplo de documentos. Implementa una tabla/modelo intermediario y para cualquier combo dado de tienda/artículo, puede tener datos adicionales, como el precio (es posible que desee eliminar el campo 'precio 'del modelo' artículo'). –

+1

Si necesita garantizar la exclusividad de un precio para una tienda determinada (parece un requisito extraño, francamente), usaría la opción meta_together única en el modelo directo, para asegurarse de que ('tienda', 'precio') son unique_together. –

Cuestiones relacionadas