У меня есть следующая модель:
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
(набор запросов Membership
) на подсписки, чтобы собрать все Membership
, совпадающие с Game
.
В идеале, ябудет делать это в представлении, а не в шаблоне.