Я хотел бы объединить множество таблиц и отфильтровать каждую из них в одном столбце.Мой пример для проверки на мягкое удаление, но я мог бы представить другие приложения, такие как фильтрация по определенной дате.
Например, если мои модели:
from django.db import models
class Members(models.Model):
name = models.CharField(max_length=255)
deleted = models.BooleanField(default=False)
class Purchases(models.Model):
member = models.ForeignKey(Members, on_delete=models.CASCADE)
item = models.ForeignKey('Items', on_delete=models.CASCADE)
deleted = models.BooleanField(default=False)
class Items(models.Model):
company = models.ForeignKey('Companies', on_delete=models.CASCADE)
deleted = models.BooleanField(default=False)
class Companies(models.Model):
deleted = models.BooleanField(default=False)
Участники делают покупки,покупки содержат товары, товары производятся компаниями.Скажем, я хочу подсчитать количество уникальных компаний, у которых участник приобрел, но я хочу проверить каждую таблицу, чтобы убедиться, что она удалена.Я могу сделать это:
Members.objects.filter(
deleted=True,
purchases__deleted=True,
purchases__item__deleted=True,
purchases__item__companies__deleted=True
).annotate(num_companies=Count('purchases__item__companies', distinct=True))
Но глупо повторять __deleted==True
для каждого столбца.Существует ли более эффективный способ фильтрации одного и того же столбца одинаковым образом в каждой промежуточной таблице в большом соединении?