Django: Можно ли выбрать уникальные комбинации двух внешних ключей без использования distinct?
У меня есть следующие модели:
class Exercise(models.Model):
name = models.CharField(max_length=300)
# ...
class UserWorkout(models.Model):
user = models.ForeignKey(User)
# ...
class WorkoutSet(models.Model):
exercise = models.ForeignKey(Exercise)
user_workout = models.ForeignKey(UserWorkout, related_name="sets")
date_time = models.DateTimeField(default=timezone.now)
weight = models.DecimalField(max_digits=10, decimal_places=6)
# ...
Вот пример данных для модели WorkoutSet, чтобы получить более полное представление:
ID weight DateTime Exercise UserWorkout
- 10.0 22/02/2022 3 UUID('755925da-9a43-490c-9ffa-3222acd1dcfa')
- 15.0 22/02/2022 3 UUID('755925da-9a43-490c-9ffa-3222acd1dcfa')
- 15.0 22/02/2022 3 UUID('755925da-9a43-490c-9ffa-3222acd1dcfa')
- 55.0 24/02/2022 5 UUID('bc59c55b-9adc-47c7-9790-2e5d8b21f956')
- 57.5 24/02/2022 5 UUID('bc59c55b-9adc-47c7-9790-2e5d8b21f956')
- 15.0 24/02/2022 3 UUID('bc59c55b-9adc-47c7-9790-2e5d8b21f956')
- 20.0 24/02/2022 3 UUID('bc59c55b-9adc-47c7-9790-2e5d8b21f956')
Я пытаюсь отфильтровать эти данные, чтобы они показывали, сколько раз было выполнено каждое упражнение (т.е. сколько тренировок с ним связано). Таким образом, вышеприведенные данные будут выглядеть следующим образом:
Exercise UserWorkout
3 UUID('755925da-9a43-490c-9ffa-3222acd1dcfa')
5 UUID('bc59c55b-9adc-47c7-9790-2e5d8b21f956')
3 UUID('bc59c55b-9adc-47c7-9790-2e5d8b21f956')
В конечном итоге я собираюсь подсчитать, сколько раз каждое упражнение было выполнено следующим образом:
qs = # some filter statement
qs = qs.values('exercise').annotate(frequency=Count('exercise'))
Я не могу использовать distinct, потому что он не работает с annotate:
NotImplementedError: annotate() + distinct(fields) не реализовано.
Возможно ли то, чего я пытаюсь достичь? Возможно, через подзапрос? Мой SQL ржавый, поэтому не уверен, что это вообще возможно.