Как мягко удалить связь "многие ко многим" с Django

В моем проекте Django все сущности, удаленные пользователем, должны быть мягко удалены путем установки текущего значения datetime для свойства deleted_at. Моя модель выглядит так: Поездка TripDestination Destination (отношение "многие ко многим"). Другими словами, у Поездки может быть несколько пунктов назначения.

Когда я удаляю поездку, SoftDeleteManager отфильтровывает все удаленные поездки. Однако, если я запрашиваю все пункты назначения поездки (используя get_object_or_404 (Trip, pk = id)), я также получаю удаленные (т.е. модели TripDestination с deleted_at == null ИЛИ удаленными_at! = Null). Я действительно не понимаю, почему, поскольку все мои модели унаследованы от LifeTimeTracking и используют SoftDeleteManager.

Может ли кто-нибудь помочь мне понять, почему SoftDeleteManager не работает для отношения 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)

Разрешение Я зарегистрировал ошибку 17746 в Django Bug DB. Спасибо Каспару за его помощь.

6
задан Martin 22 February 2012 в 14:04
поделиться