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 и бэкенд (написание запросов!) - это не то, чем я занимаюсь часто, поэтому извините, если мой вопрос сформулирован плохо.