В моем проекте 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. Спасибо Каспару за его помощь.