2011-08-29 14 views
30

En un modelo, tengo unas pocas cosas:¿Cómo eliminar todas las relaciones de manytomany?

class MyModel(models.Model): 
    relations = models.ManyToManyField(OtherModel) 
    .... 

y si decido:

my_object.relations.remove(other_model_object) 

funciona.

¿Cómo eliminar todos los objetos de las relaciones? my_object.relations.clean() no está funcionando.

+4

.Remove() y .clear() eliminará las relaciones, pero en realidad no eliminarán objetos relacionados ... ¿es eso lo que estás tratando de hacer? – Brandon

+0

Sí, muy gracias. – Nips

+0

vea aquí http://stackoverflow.com/questions/4719137/how-do-i-remove-multiple-objects-in-a-manytomany-relationship-based-on-a-filter – madjardi

Respuesta

33

En primer lugar, deberá borrar la (s) relación (es) utilizando .clear() o .remove(), la que mejor se adapte a sus necesidades according to the docs.

Después de eso, tendrá que eliminar el objeto (s) con [YourModel]. delete() método.

23

Si necesita eliminar solo la relación para todas las instancias entre 2 modelos, puede hacerlo accediendo al Administrador de la tabla de relaciones. La tabla de relación M2M puede acceder a través MyModel.relations.through por lo que para la eliminación de las relaciones se convierte en fácil:

MyModel.relations.through.objects.all().delete() 

referencia:

https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.ManyToManyField.through

+25

Tenga cuidado con esto ya que esto borre todas las filas en la tabla m2m mientras los objetos atraviesan. desacoplan la m2m de MyModel. Por lo tanto, debe hacer algo como 'Author.books.through.objects.filter (author_id = author.pk) .delete()' – Christoffer

+0

esto era lo que estaba buscando. útil, pero no la respuesta correcta. – benzkji

+0

¡Advertencia! ¡Esta es una función realmente peligrosa ya que eliminará toda la tabla de relaciones! –

Cuestiones relacionadas