2014-12-04 2 views
1

У меня есть мнение обновление:Джанго вид обновления и передачи контекста

class GeneralUserUpdateView(UpdateView): 

    model = GeneralUser 
    form_class = GeneralUserChangeForm 
    template_name = "general_user_change.html" 

    def dispatch(self, *args, **kwargs): 
     return super(GeneralUserUpdateView, self).dispatch(*args, **kwargs) 

    def post(self, request, pk, username): 

     self.pk = pk 
     self.username = username 
     self.gnu = GeneralUser.objects.get(pk=self.pk) 
     #form = self.form_class(request.POST, request.FILES) 
     return super(GeneralUserUpdateView, self).post(request, pk) 

    def form_valid(self, form, *args, **kwargs): 
     self.gnu.username = form.cleaned_data['username'] 
     self.gnu.email = form.cleaned_data['email'] 
     self.gnu.first_name = form.cleaned_data['first_name'] 
     self.gnu.last_name = form.cleaned_data['last_name'] 
     self.gnu.address = form.cleaned_data['address'] 
     self.gnu.save() 

     return redirect("user_profile", self.pk, self.username) 

Вот с этой точки зрения я хочу передать контекст как:

context['picture'] = GeneralUser.objects.get(pk=self.pk) 

Я пытаюсь get_context_data, но я не могу рк доступа в там .. Я делаю обновление правильно ?? Как я могу передать этот контекст там?

ответ

1

Нельзя переоценивать post. Вся эта логика должна произойти в get_context_data.

На самом деле, ни один из ваших переопределений не требуется. Все, что вы делаете в form_valid, будет выполнено уже по стандартной форме. И переопределение dispatch просто назвать суперкласс бесцельно.

Ваше мнение должно выглядеть только, без перекрытых методов на всех:

class GeneralUserUpdateView(UpdateView): 
    model = GeneralUser 
    form_class = GeneralUserChangeForm 
    template_name = "general_user_change.html" 
    context_object_name = 'picture' 

(хотя это кажется немного странным, что вы хотите, чтобы обратиться к экземпляру GeneralUser как «картина»).

Редактировать для перенаправления на определенный URL, вы можете определить get_success_url:

def get_success_url(self): 
     return reverse("user_profile", self.kwargs['pk'], self.kwargs['username']) 
+0

и что о перенаправлении ?? Как я могу получить pk и имя пользователя при перенаправлении? Как это использовать? – gamer