Thank you so much, Xavier. I think that's it. A while ago I checked my
template tags for thread safety, but somehow I missed one of them that
deals with form formatting. I will let you know if the problems
reappears.

All the best,
Leif


On Sep 20, 10:09 am, Xavier Ordoquy <xordo...@linovia.com> wrote:
> Hi,
>
> Are you sure you don't get a thread safety issue ?
> Do you have your own template tags for those forms ?
>
> Regards,
> Xavier.
>
> Le 20 sept. 2010 à 18:42, intrepidweb a écrit :
>
>
>
> > Hi all,
>
> > Last week I ported a site that gets 50k+ pageviews/day from a PHP/
> > mySQL stack to Django/Postgresql. It has gone mostly smoothly, all
> > things considered. However, I have encountered a VERY troubling bug
> > involving the forms module, and I can't figure it out.
>
> > The form in question allows users to edit their profile. We have
> > several types of users, and each user type has a core set of fields,
> > as well as a few unique ones. Rather than write each profile edit form
> > from scratch, they inherit from parent classes.
>
> > The profile edit form accepts a User instance in its __init__ method,
> > and uses that object to populate the initial data, and also to save
> > the cleaned data to the appropriate User and UserProfile instances.
>
> > The problem is in about 20% of the time, the form, when displayed on a
> > page, is displaying OTHER users' information as the initial data. I
> > have determined that this is not a page caching issue. Additionally, I
> > confirmed that the correct user object is being passed to the form
> > class. So the form instance itself is switching the user object. My
> > guess is that somehow the user object is being assigned as a class
> > attribute, not an instance attribute. But otherwise I am stumped.
>
> > Here are snippets of the code. I know the inheritance scheme seems a
> > bit convoluted, but it was written this way in the name of DRY. Any
> > help would be greatly appreciated.
>
> > Leif
>
> > #####################
>
> > class PostalCodeForm (forms.Form):
> >    country = forms.ChoiceField(choices=[(c.country_code,c.en_name) for c
> > in Country.objects.all()],required=True, label='Country')
> >    postal_code = forms.CharField(required=True, label="ZIP/postal code")
>
> >    def clean_country (self):
> >            ...
>
> >    def clean_postal_code (self):
> >            ...
> > ####
>
> > class UserProfileEditFormBase (forms.Form):
> >    first_name = custom_fields.NoProfanitiesCharField(max_length=150,
> > help_text = 'Your real first name. We will keep it private.')
> >    last_name = custom_fields.NoProfanitiesCharField(max_length=150,
> > required=False, help_text = 'Your real last name. We will keep it
> > private.')
> >    display_name = custom_fields.NoProfanitiesCharField(max_length=40,
> > help_text="Your public screenname. Will be shown on reviews that you
> > write, comments, etc.", label="Display name")
> >    email = custom_fields.EmailField()
> >    gender = forms.models.ModelChoiceField(queryset=Gender.objects.all(),
> > empty_label=None)
>
> >    def __init__ (self, user, *args, **kwargs):
> >            kwargs.setdefault('initial',{})
> >            kwargs['initial'] = self.get_initial(user,kwargs['initial'])
> >            super(UserProfileEditFormBase,self).__init__(*args, **kwargs)
> >            self.user = user
>
> >    def get_initial (self, user, initial={}):
> >            for k in self.base_fields.keys():
> >                    if k=='country':
> >                            initial[k] = getattr(profile,k).country_code
> >                    elif k=='postal_code' and getattr(profile,k,None):
> >                            initial[k] = getattr(profile,k).postal_code
> >                    elif getattr(user,k,None):
> >                            initial[k] = getattr(user,k)
> >                    elif getattr(profile, k, None):
> >                            a = getattr(profile, k)
> >                            if hasattr(a,'id'):
> >                                    initial[k] = a.id
> >                            else:
> >                                    initial[k] = a
> >            return initial
>
> >    def save (self):
> >            # uses self.user to save the cleaned_data
> >            ...
>
> > ##########
>
> > class UserProfileEditForm (UserProfileEditFormBase, PostalCodeForm):
>
> >    about_you = forms.CharField(help_text="Description of yourself that
> > will appear with reviews and comments that you write.",
> > widget=forms.widgets.Textarea, required=False )
>
> >    def get_initial (self, user, initial={}):
>
> >            initial = super(UserProfileEditForm,self).get_initial(user, 
> > initial)
> >            bios = user.reviewerbio_set.filter(is_primary=True)
> >            if bios:
> >                    initial['about_you'] = bios[0].text
>
> >            return initial
>
> >    def save (self, user):
> >            ....
>
> > ###############
>
> > --
> > You received this message because you are subscribed to the Google Groups 
> > "Django users" group.
> > To post to this group, send email to django-us...@googlegroups.com.
> > To unsubscribe from this group, send email to 
> > django-users+unsubscr...@googlegroups.com.
> > For more options, visit this group 
> > athttp://groups.google.com/group/django-users?hl=en.

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

Reply via email to