2014-01-25 3 views
2

У меня есть этот URL является http://127.0.0.1:8000/upload/picturelist/1, что делает user_id = 1,функция Django на основе вид на основе зрения класса

В моей urls.py

url(r'^picturelist/(?P<user_id>\d+)$', views.pictureList), 

В моей view.py

def pictureList(request, user_id): 
    if int(user_id) != request.user.id: 
     raise PermissionDenied 

Как я могу использовать эту функцию для представления createview?

class pictureList(CreateView): 

ответ

0

Вы могли бы сделать что-то вроде этого:

В urls.py: url(r'^picturelist/(?P<user_id>\d+)$', views.MakeItView.as_view()),

В views.py:

class MakeItView(CreateView): 
    model = myModel 
    template_name = 'whatever.html' 

    def get_context_data(self, **kwargs): 
     context = super(MakeItView, self).get_context_data(**kwargs) 
     if int(self.kwargs['user_id']) != self.request.user.id: 
      raise PermissionDenied 
     return context 
+0

привет я NoReverseMatch в/автор/добавить/4. http://stackoverflow.com/questions/21438927/noreversematch-django-class-based – user2387135

0

Я никогда не использовал CreateView, но вот что я понял, читая документы:

Вы можете сделать это, определив form_valid:

вид:

class pictureList(CreateView): 
    model = YourModelHere 
    fields = ['whatever','fields','you','want','edited'] 

    def form_valid(self, form): 
    record = form.save(commit = False) 

    # assuming the user id is associated 
    # to the model with fieldname user_id 

    if (self.request.user == record.user_id): 
     record.save() 
     return HttpResponseRedirect(self.get_success_url()) 
    # not sure if this works: 
    return self.form_invalid() 

Тогда шаблон будет на 'yourappname/yourmodelhere_form.html'.

См. Пример CreateView.