Представление на основе функций Django для представления на основе классов

У меня есть этот URL-адрес http://127.0.0.1:8000/upload/picturelist/1, что делает user_id = 1,

В моем urls.py

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

На мой взгляд.py

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

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

class pictureList(CreateView):

person user2387135    schedule 25.01.2014    source источник


Ответы (2)


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

В 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
person reu    schedule 25.01.2014
comment
привет, я получаю NoReverseMatch в /author/add/4. stackoverflow.com/questions/21438927/ - person user2387135; 29.01.2014

Я никогда не использовал 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.

person bozdoz    schedule 25.01.2014