Python django更新视图和传递上下文

Python django更新视图和传递上下文,python,django,view,django-context,Python,Django,View,Django Context,我有一个更新视图: class GeneralUserUpdateView(UpdateView): model = GeneralUser form_class = GeneralUserChangeForm template_name = "general_user_change.html" def dispatch(self, *args, **kwargs): return super(GeneralUserUpdateView, se

我有一个更新视图:

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)
我尝试获取上下文数据,但无法访问其中的pk。。
我的更新是否正确??我如何在那里传递上下文???

您根本不应该覆盖
post
。所有这些逻辑都应该发生在
get\u context\u data

事实上,不需要任何覆盖。您在
form\u valid
中执行的所有操作都将通过标准表单save完成。而重写
dispatch
只是为了调用超类是毫无意义的

您的视图应该看起来像这样,完全没有被重写的方法:

class GeneralUserUpdateView(UpdateView):
    model = GeneralUser
    form_class = GeneralUserChangeForm
    template_name = "general_user_change.html"
    context_object_name = 'picture'
(尽管将GeneralUser的实例称为“picture”似乎有点奇怪)

编辑要重定向到特定URL,您可以定义
get\u success\u URL

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

那么重定向呢??重定向时如何获取pk和用户名??如何使用它??