En mi proyecto Django, todas las entidades eliminadas por el usuario deben eliminarse de manera instantánea estableciendo el datetime actual en la propiedad deleted_at. Mi modelo se ve así: Trip < -> TripDestination < -> Destination (muchos a muchos). En otras palabras, un Viaje puede tener múltiples destinos.Cómo eliminar fácilmente la relación muchos a muchos con Django
Cuando elimino un Viaje, el Administrador de eliminación de errores borra todo el viaje eliminado. Sin embargo, si solicito todos los destinos de un viaje (usando get_object_or_404 (Trip, pk = id)), también obtengo los eliminados (es decir, modelos TripDestination con deleted_at == null O deleted_at! = Null). Realmente no entiendo por qué dado que todos mis modelos heredan de LifeTimeTracking y están usando SoftDeleteManager.
¿Puede alguien ayudarme a entender por qué SoftDeleteManager no funciona para la relación n: m?
class SoftDeleteManager(models.Manager):
def get_query_set(self):
query_set = super(SoftDeleteManager, self).get_query_set()
return query_set.filter(deleted_at__isnull = True)
class LifeTimeTrackingModel(models.Model):
created_at = models.DateTimeField(auto_now_add = True)
updated_at = models.DateTimeField(auto_now = True)
deleted_at = models.DateTimeField(null = True)
objects = SoftDeleteManager()
all_objects = models.Manager()
class Meta:
abstract = True
class Destination(LifeTimeTrackingModel):
city_name = models.CharField(max_length = 45)
class Trip(LifeTimeTrackingModel):
name = models.CharField(max_length = 250)
destinations = models.ManyToManyField(Destination, through = 'TripDestination')
class TripDestination(LifeTimeTrackingModel):
trip = models.ForeignKey(Trip)
destination = models.ForeignKey(Destination)
Resolución me presentó el error 17746 en Django Bug DB. Gracias a Caspar por su ayuda en esto.
@Martin He actualizado mi respuesta, mira si funciona para ti :) – Caspar
Hola Caspar! Gracias por ayudarme. Pero lo que estoy buscando es no ver los destinos si se ha eliminado la Tripdesrimation, no Destination. – Martin
Ah, ya veo lo que quieres decir. Lo probé y no funciona con mi solución, lo que creo que indica un error. Una [búsqueda rápida] (https://code.djangoproject.com/search?q=use_for_related_fields) a través de los errores db no enciende nada (aunque hay un error que es [casi lo contrario] (https: // code.djangoproject.com/ticket/14891)), entonces podría ser hora de provocar un error. – Caspar