django - 根据给定字段将 Django 查询集拆分为多个子列表
问题描述
我有以下模型:
class Game(models.Model):
users = models.ManyToManyField(User, through='Membership', related_name='users')
date_game = models.DateField(default=datetime.date.today)
class Membership(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name=_('joueur'))
game = models.ForeignKey(Game, on_delete=models.CASCADE)
score = models.IntegerField(_('score'), default=0, validators=[
MaxValueValidator(50),
MinValueValidator(0)
])
我也有这个ListView
,它旨在检索与给定播放的所有Membership
对象相关联:Game
User
class GameListView(ListView):
model = webapp_models.Membership
template_name = 'list_games.html'
form = webapp_forms.UserChoiceField
def get_queryset(self):
if self.request.method == 'GET':
form = self.form(self.request.GET)
if form.is_valid():
user = form.cleaned_data['user_choice_field']
# all games played by the user
tmp = Game.objects.filter(membership__user=user)
# all memberships associated to games played by the user
out = Membership.objects.filter(game__in=tmp)
for obj in out:
print(obj.game.date_game, obj.game.id, obj.user.username, obj.score)
return out
return Membership.objects.all()
def get_context_data(self, *args, object_list=None, **kwargs):
context = super(GameListView, self).get_context_data(*args, object_list=None, **kwargs)
# use the GET data to avoid resetting the form
context['form'] = self.form(self.request.GET)
return context
因此,我想将out
(queryset of Membership
) 拆分为子列表以收集所有Membership
相同的匹配Game
。
理想情况下,我会在视图中而不是在模板中执行此操作。
解决方案
也许你可以换个角度想。
games = Game.objects.filter(membership__user=user).select_related('membership')
for game in games:
for member in game.members:
...do whatever with the members/scores
推荐阅读
- python - Pandas 将数据从列中提取到字符串中
- javascript - 等待 getScript 而不链接回调
- c# - 玩家在 Unity 中不动
- c# - 可以从表达式参数推断其类型参数的 C# 通用方法
- javafx - 将行添加到 TableView(JavaFX 8)时,似乎无法以编程方式从 TableCell(类似 TextFieldTableCell)中选择 TextField
- mysql - 如何在 MYSQL 中以百分比的形式显示月销售额的增长?
- python-3.x - Pip install 将库安装到不同的位置
- python - NLTK 荷兰语 alpino 到英语
- c# - 将整数列表(1 和 0)保存到字节并将数字写入文件
- excel - VBA 矩阵打印单独的列