Monday, August 1, 2011

Re: Updating Context Data in FormView 'form_valid' Method

On Monday, 1 August 2011 12:43:23 UTC+1, Tom Evans wrote:
On Mon, Aug 1, 2011 at 11:08 AM, Abhilash Inumella
<abhilas...@gmail.com> wrote:
> Dear all,
>
> I have a class QuestionView which is derived from FormView class. Here
> is the code snippet to explain my problem:
>
> class QuestionView(FormView):
>  ..
>  context_var1 = y

This declares a class attribute called context_var1, which initially
has the value y. When you construct an instance of this class, this is
copied to self.context_var1


Er, no. This declares a class attribute called context_var1, full stop. No copying to instance attributes takes here at all.

>  def form_valid (self, form):
>     ...
>     self.context_var1 = x

This updates self.context_var1

Yes. Which refers to the class attribute. So all instances will see the updated value. 

>     ...
>  def get_context_data(self, **kwargs):
>    ...
>    context['context_var1'] = context_var1

Here you are using the class attribute, rather than the instance
attribute. The class attribute is never changed from y, only the
instance attribute. You want self.context_var1 here.

Yes he does, but not for that reason.
 

>    ...
>    return context
>
>
> As shown above, I update a set of context variables in form_valid and
> I intend to use these in the template - hence the variables in context
> dictionary. The problem with this code is that the change in
> context_var1 isn't seen - might be because 'get_context_data' is
> called before 'form_valid' method. Is there is a work around for
> this?

Well, you've got to call the functions in the appropriate order. Try
accessing the attribute via self, and see where that gets you.


To make this work, the OP needs to assign to `self.context_var1` in the `__init__  method.
--
DR.

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To view this discussion on the web visit https://groups.google.com/d/msg/django-users/-/ZrHadRZnil0J.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to django-users+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/django-users?hl=en.

No comments:

Post a Comment