Django Обновление представления и передачи контекста
У меня есть вид обновления:
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 как "picture").
Изменить, чтобы перенаправить на определенный URL, вы можете определить get_success_url
:
def get_success_url(self):
return reverse("user_profile", self.kwargs['pk'], self.kwargs['username'])