Как отфильтровать один и тот же столбец в каждой промежуточной таблице в Django join - PullRequest
0 голосов
/ 14 февраля 2019

Я хотел бы объединить множество таблиц и отфильтровать каждую из них в одном столбце.Мой пример для проверки на мягкое удаление, но я мог бы представить другие приложения, такие как фильтрация по определенной дате.

Например, если мои модели:

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 для каждого столбца.Существует ли более эффективный способ фильтрации одного и того же столбца одинаковым образом в каждой промежуточной таблице в большом соединении?

...