Как фильтровать различные объекты в отношениях "многие-ко-многим" в Django?
У меня есть страница, на которой я показываю все планы тренировок каждого пользователя. Но я хочу показать только одну запись для каждого пользователя, чтобы потом я мог щелкнуть и получить все планы тренировок этого пользователя. Поэтому вместо того, чтобы показывать:
User 1 - Day 1
USer 1 - Day 2
User 2 - Day 1
USer 2 - Day 2
Я хочу показать:
User 1
User 2
Я использовал следующий вид:
planos = Workout.objects.all()
Но это показывало все, поэтому я попробовал:
plan = Workout.objects.values('member').distinct()
Но это возвращает {'member': 1}
и {'member': 2}
.
Как я могу получить доступ к имени пользователя?
class Member(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
socio = models.CharField(max_length=6)
address = models.CharField(max_length=200)
city = models.CharField(max_length=200)
class Exercise(models.Model):
exercise = models.CharField(max_length=166)
series = models.CharField(max_length=2)
reps = models.CharField(max_length=2)
maquina = models.ForeignKey(Maquina)
class Workout(models.Model):
member = models.ForeignKey(Membro)
day = models.CharField(max_length=1)
exercises = models.ManyToManyField(Exercise)
Вы фильтруете на модели Member
:
Member.objects.filter(
workout__isnull=False
).distinct()
Это сделает LEFT OUTER JOIN на модели Workout
, и таким образом получит Member
, если (и только если) есть хотя бы один связанный Workout
объект. .distinct()
предотвратит возврат одного и того же Member
несколько раз.
Мы также можем получить User
модели за этим членом с помощью:
User.objects.filter(
member__workout__isnull=False
).distinct()
Если вы просто хотите получить все члены, вы можете работать с Member.objects.all()
и таким образом отобразить их, а затем убедиться, что можно нажать на ссылку, чтобы получить подробную информацию для этого Member
.