Django: доступ вошедшего в систему пользователя при указании общего представления в urlpatterns - PullRequest
3 голосов
/ 14 февраля 2012

У меня есть модель, которая выглядит следующим образом:

from django.db import models
from django.contrib.auth.models import User

    class Application(models.Model):

        STATUS_CHOICES = (
        (u'IP',u'In Progress'),
        (u'C',u'Completed'))

        status = models.CharField(max_length=2 ,choices=STATUS_CHOICES, default='IP')
        title = models.CharField(max_length = 512)
        description = models.CharField(max_length = 5120)
        principle_investigator = models.ForeignKey(User, related_name='pi')

И я хочу использовать общий ListView, в котором перечислены приложения для текущего пользователя, который имеет статус «IP»

Я начал писать свой urlpattern и понял, что мне нужно будет ссылаться на пользователя, вошедшего в систему в данный момент, в свойстве queryset .... это возможно или мне нужно будет прикусить пулю и написать стандартное настраиваемое представление, которое обрабатываетзапрос модели?

Вот как далеко я попал для иллюстрации:

url(r'^application/pending/$', ListView.as_view(
      queryset=Application.objects.filter(status='IP'))),

1 Ответ

13 голосов
/ 14 февраля 2012

Вы не можете фильтровать пользователя в вашем urls.py, потому что вы не знаете пользователя, когда URL-адреса загружаются.

Вместо этого создайте подкласс ListView и переопределите метод get_queryset для фильтрации вошедшего в систему пользователя.

class PendingApplicationView(ListView):
    def get_queryset(self):
        return Application.objects.filter(status='IP', principle_investigator=self.request.user)

# url pattern
url(r'^application/pending/$', PendingApplicationView.as_view()),
...