Django: многие ко многим элементам колонки 'self' для дальнейшей фильтрации

queryset = Exercise.objects.all()
trainer_id = filters.get('trainer_id')
if 'trainer_id' in query_serializer.initial_data and trainer_id:
    # filter on the given trainer if and only if trainer id was provided
    queryset = queryset.filter(exercise_assets__trainer_id=trainer_id)

У меня есть этот код в моем views.py файле, который генерирует запрос, возвращающий мне один объект Exercise в качестве ответа.

Объект упражнения имеет колонку отношения (self) many to many, определенную следующим образом:

alternative_exercises = models.ManyToManyField('self', blank=True)

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

Вот что у меня есть на данный момент:

queryset.annotate(
    alternative_exercises_assets_id=FilteredRelation(
        'alternative_exercises',
        condition=Q(alternative_exercises__assets__id=trainer_id),
    ),
)

Но, похоже, это не работает (я все еще получаю альтернативные_упражнения, как если бы они были отфильтрованы любым способом). Являются ли anotate и FilteredRelation способом для моего случая использования и если да, то что не так?

Я только осваиваю Django и бэкенд (написание запросов!) - это не то, чем я занимаюсь часто, поэтому извините, если мой вопрос сформулирован плохо.

Вернуться на верх