Как мне создать этот набор запросов? - PullRequest
1 голос
/ 23 апреля 2019

У меня есть следующие три модели:

class Category(models.Model):
    name = models.CharField(max_length=120)

class Experiment(models.Model):
    name = models.CharField(max_length=50, unique=True)
    categories = models.ManyToManyField(Category)

class Ad(models.Model):
    experiment = models.ForeignKey(Experiment, related_name='ads', on_delete=models.CASCADE)
    category = models.ForeignKey(Category, on_delete=models.PROTECT, blank=True, null=True)

Я хочу создать набор запросов, который возвращает все объявления, где ad.category находится в ad.experiment.categories.

Некоторые примеры данных для обсуждения: Категория: ['Cat1', 'Cat2', 'Cat3', Cat4 ',' Cat5 ']

Эксперимент: [['Exp1', ['Cat2', 'Cat3]], [' Exp2 ', [' Cat5 ',' Cat1 ']]]

Объявление: [['Exp1', 'Cat4'], ['Exp1', 'Cat2']]

Набор запросов, который я надеюсь создать, будет возвращать только второе объявление, поскольку категория объявления находится в категории эксперимента объявления.

Буду признателен за любую помощь!

1 Ответ

0 голосов
/ 23 апреля 2019

Вам нужно пересмотреть обратную связь для эксперимента, а затем использовать объект F для доступа к полю ad category в запросе. Отличительный используется потому, что в эксперименте будет много категорий, поэтому одно объявление может иметь несколько совпадений при сравнении.

from django.db.models import F
Ad.objects.filter(experiment__category=F('category')).distinct()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...