0
나는 다음과 같다 모델이에 의해 하위 그룹으로 나눈다 질의 : 내 의견이 같은 사용자가 항목을 필터링하고있어에서장고 - 속성
class ListEntry(models.Model):
STATUS_CHOICES = (
('PL', _('Playing')),
('CO', _('Completed')),
('OH', _('On-hold')),
('DR', _('Dropped')),
('WA', _('Want to play')),
)
user = models.ForeignKey(User)
game = models.ForeignKey(Game)
status = models.CharField(_('Status'), max_length=2,
choices=STATUS_CHOICES)
:
class GameListByUserView(ListView):
model = ListEntry
template_name = 'game_list_by_user.html'
def get_queryset(self):
self.user_profile = get_object_or_404(User, username=self.kwargs['slug'])
return ListEntry.objects.filter(user=self.user_profile)
def get_context_data(self, **kwargs):
context = super(GameListByUserView, self).get_context_data(**kwargs)
context['user_profile'] = self.user_profile
return context
를 내가 지금하려고하면 status
속성에 따라이 쿼리 (ListEntry.objects.filter(user=self.user_profile)
)를 하위 그룹으로 분할하므로 렌더링 된 템플릿은 다음과 같이 표시됩니다.
UserFoo's list
=========================
Playing
Game 1
Game 2
Game 3
Completed
Game 4
Game 5
Game 6
그래서
q = ListEntry.objects.filter(user=self.user_profile)
games_dict = {}
games_dict['playing'] = q.filter(status='PL')
games_dict['completed'] = q.filter(status='CO')
그리고, 및 템플릿의 키를 반복 :
는 내가 뭔가를 할 수있어. 또는 (템플릿에) :
{% for s in status_choices %}
{% for entry in object_list %}
{% if entry.status == s %}
Render things
{% endif %}
{% endfor %}
{% endfor %}
그러나 데이터베이스를 I 상태로 하위 쿼리를받을 때마다 타격하지 않고이 작업을 수행 할 수있는 더 나은, 최적화 방법, 그리고 객체의리스트를 여러 번 반복하지 않고이 없다?