[英]How to filter distinct objects in a many-to-many relationship in Django?
I have a page where I show all workout plans from each user.我有一个页面,其中显示每个用户的所有锻炼计划。 But I want to show only one entry per user, so then I can click and get all workouts plans of that user.但我只想为每个用户显示一个条目,这样我就可以单击并获取该用户的所有锻炼计划。 So, instead of showing:所以,而不是显示:
User 1 - Day 1
USer 1 - Day 2
User 2 - Day 1
USer 2 - Day 2
I want to show:我想展示:
User 1
User 2
I was using the following view:我正在使用以下视图:
planos = Workout.objects.all()
But this would show everything, so I tried:但这会显示一切,所以我尝试了:
plan = Workout.objects.values('member').distinct()
But this returns {'member': 1}
and {'member': 2}
.但这会返回{'member': 1}
和{'member': 2}
。
How can I access the name of the user?如何访问用户名?
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)
You filter on the Member
model:您筛选Member
model:
Member.objects.filter(
workout__isnull=False
).distinct()
This will make a LEFT OUTER JOIN on the Workout
model, and thus retrieve Member
s if (and only if) there is at least one related Workout
object. The .distinct()
will prevent that the same Member
is returned multiple times.这将在Workout
model 上进行左外连接,因此当(且仅当)至少有一个相关Workout
object 时检索Member
。 .distinct()
将防止多次返回同一Member
。
We can also obtain the User
models behind that member with:我们还可以通过以下方式获取该成员背后的User
模型:
User.objects.filter(
member__workout__isnull=False
).distinct()
If you simply want to retrieve all members, you can work with Member .objects.all()
and thus render these, and then ensure that one can click a link to get details for that Member
.如果您只想检索所有成员,您可以使用Member .objects.all()
并呈现这些成员,然后确保可以单击链接以获取该Member
的详细信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.