Tengo dos clases de modelo de Django:añadiendo el mismo objeto dos veces a un ManyToManyField
class A(models.Model):
name = models.CharField(max_length = 128) #irrelevant
class B(models.Model):
a = models.ManyToManyField(A)
name = models.CharField(max_length = 128) #irrelevant
Lo que quiero hacer es la siguiente:
a1 = A()
a2 = A()
b = B()
b.a.add(a1)
b.a.add(a1) #I want to have a1 twice
b.a.add(a2)
assert len(b.a.all()) == 3 #this fails; the length of all() is 2
Supongo que añadir() utiliza un establecer la semántica, pero ¿cómo puedo evitar eso? Traté de buscar administradores personalizados, pero no estoy seguro si esto es el camino correcto (parece complicado) ...
¡Gracias de antemano!
Creo que eso no es del todo correcto. La relación de A a B se realiza a través de una tabla de relaciones compuesta por tres columnas: id, a_id y b_id. id es la clave principal de esa tabla, por lo que estaría bien tener tres filas en esa tabla donde dos tienen la misma entrada para a_id y b_id, respectivamente. Y esto es lo que quiero, pero no sé cómo decirle a Django que ... – qollin
@qolin, la respuesta de sos-skil te ofrece una manera de hacer una tabla (no a través de muchos), mi idea es solo agregar un campo de conteo a esa tabla en lugar de confiar en los duplicados (es solo una forma más compacta) para implementar bolsas multisector, también conocidas como bolsas). –
@qollin: no estoy seguro de que pueda confiar en que siempre haya una identificación en la tabla de relaciones, que puede ser un detalle de implementación. Y puede crear muchos a muchos usando una tabla "directa" que puede tener columnas adicionales, como el campo de recuento que sugirió Alex. –