我到处搜索但是我找不到这个问题的解决方案,初看起来应该是微不足道的。
请考虑Djano模型:
class UserModel(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
institution=models.CharField(max_length=128)
class TeamModel(models.Model):
creator= models.ForeignKey(UserModel,related_name='creator')
members= models.ManyToManyField(UserModel,related_name='teams'))
name=models.CharField(max_length=64)`
那些模型是固定的,我无法改变它们。我当然可以包括新的领域。
要检索与用户关联的团队,我可以这样做:
queryset= instance_UserModel.teams.all()
完美无缺!现在我想按成员数量订购团队。
queryset= queryset.annotate(num_members=Count('members')).order_by('num_members')
它不起作用,因为num_members值总是" 1"!
print queryset[0].num_members
print queryset[1].num_members
始终返回" 1"。发生了什么??? !!!
提前谢谢你,
CBAR
答案 0 :(得分:0)
未经测试
class TeamModel(models.Model):
creator= models.ForeignKey(UserModel,related_name='creator')
members= models.ManyToManyField(UserModel,related_name='teams'))
name=models.CharField(max_length=64)`
views.py
import operator
teams = TeamModel.objects.all()
team_member_count = {}
for team in teams:
team_member_count[team.name] = team.members.all.count()
sorted_teams_by_member_count = sorted(team_member_count.items(), key=operator.itemgetter(1))
答案 1 :(得分:0)
我找到了解决方案,但我不知道数据库操作的效率如何。我仍然不明白为什么我以前的代码不起作用。
qUserTeams=instance_UserModel.teams.all()
qAllTeams=TeamModel.objects.all().annotate(num_members=Count('members')).order_by('num_members')
queryset= qAllTeams & qUserTeams