Django: UpdateView ограничить для каждого пользователя - PullRequest
6 голосов
/ 21 декабря 2011

У меня есть сайт, где пользователи могут создавать и редактировать свои списки.

Я использую общий вид CreateView, чтобы позволить пользователям создавать списки.

Я хотел бы использовать общий вид UpdateView, чтобы позволить им редактировать списки, но login_required=True в этом случае недостаточно, поскольку только создатель списка может редактировать его / ее список.

2 вопроса:

1) есть ли какой-либо параметр, который я могу указать в URLconf, чтобы добавить эти ограничения?

2) можно ли навязать те общие представления, которые должны работать только с POST, а не с GET?

Спасибо

Ответы [ 2 ]

5 голосов
/ 22 декабря 2011

Вы можете переопределить get_queryset на UpdateView:

def get_queryset(self):
    base_qs = super(YourListUpdateView, self).get_queryset()
    return base_qs.filter(user=self.request.user)
2 голосов
/ 21 декабря 2011

1) вы можете написать декоратор и использовать его так же, как login_required декоратор, то есть:

def user_permitted(function):
    def decorator(function):
        def _wrapped_view(request, *args, **kwargs):
            # get obj from request
            if obj.user != request.user:
                return HttpResponseRedirect(reverse('forbidden'))
            return function(request, *args, **kwargs)
        return _wrapped_view
    return decorator(function)

2) да, см. декораторы и Декорирование представлений на основе классов

...