我有一个页面显示每个用户的所有锻炼计划。但是我希望每个用户只显示一个条目,这样我就可以点击并获得该用户的所有锻炼计划。所以,与其显示:
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()
这将在Workout
模型上创建一个LEFT OUTER JOIN,因此当(且仅当)至少有一个相关的Workout
对象时检索Member
s。.distinct()
将防止多次返回相同的Member
。
成员后面的User
模型也可以用:
User.objects.filter(
member__workout__isnull=False
).distinct()
如果您只是想检索所有成员,您可以使用Member.objects.all()
并因此渲染这些,然后确保可以单击链接以获取该Member
的详细信息。