I've got the reason, so I thought I'd post it here, and I'll raise a
ticket with the Debug app.

It's an error with the Debug app I use for developing. If you switch
it off with Local_Dev = False, everything works.

On Jul 15, 9:24 am, Ricko <rickentr...@gmail.com> wrote:
> Yep, here is the ProfileForm class
>
> from django import forms
> from django.forms import ModelForm
> from django.contrib.auth.models import User
>
> class ProfileForm(ModelForm):
>
>     def __init__(self, *args, **kwargs):
>         super(ProfileForm, self).__init__(*args, **kwargs)
>         try:
>             self.fields['email'].initial = self.instance.user.email
>             self.fields['first_name'].initial =
> self.instance.user.first_name
>             self.fields['last_name'].initial =
> self.instance.user.last_name
>         except User.DoesNotExist:
>             pass
>
>     email = forms.EmailField(label="Primary email",help_text='')
>     first_name = forms.CharField(label="First Name",help_text='')
>     last_name = forms.CharField(label="Last Name",help_text='')
>
>     class Meta:
>       model = User
>       exclude = ('user',)
>
>     def save(self, *args, **kwargs):
>         """
>         Update the primary email address, first and last names on the
> related User object as well.
>         """
>         u = self.instance.user
>         u.email = self.cleaned_data['email']
>         u.first_name = self.cleaned_data['first_name']
>         u.last_name = self.cleaned_data['last_name']
>         u.save()
>         profile = super(ProfileForm, self).save(*args,**kwargs)
>         return profile
>
> And the view (which is just the default from the Profile app):
>
> def edit_profile(request, form_class=None, success_url=None,
>                  template_name='profiles/edit_profile.html',
>                  extra_context=None):
>     """
>     Edit the current user's profile.
>
>     If the user does not already have a profile (as determined by
>     ``User.get_profile()``), a redirect will be issued to the
>     :view:`profiles.views.create_profile` view; if no profile model
>     has been specified in the ``AUTH_PROFILE_MODULE`` setting,
>     ``django.contrib.auth.models.SiteProfileNotAvailable`` will be
>     raised.
>
>     **Optional arguments:**
>
>     ``extra_context``
>         A dictionary of variables to add to the template context. Any
>         callable object in this dictionary will be called to produce
>         the end result which appears in the context.
>
>     ``form_class``
>         The form class to use for validating and editing the user
>         profile. This form class must operate similarly to a standard
>         Django ``ModelForm`` in that it must accept an instance of the
>         object to be edited as the keyword argument ``instance`` to
>         its constructor, and it must implement a method named
>         ``save()`` which will save the updates to the object. If this
>         argument is not specified, this view will use a ``ModelForm``
>         generated from the model specified in the
>         ``AUTH_PROFILE_MODULE`` setting.
>
>     ``success_url``
>         The URL to redirect to following a successful edit. If not
>         specified, this will default to the URL of
>         :view:`profiles.views.profile_detail` for the profile object
>         being edited.
>
>     ``template_name``
>         The template to use when displaying the profile-editing
>         form. If not specified, this will default to
>         :template:`profiles/edit_profile.html`.
>
>     **Context:**
>
>     ``form``
>         The form for editing the profile.
>
>     ``profile``
>          The user's current profile.
>
>     **Template:**
>
>     ``template_name`` keyword argument or
>     :template:`profiles/edit_profile.html`.
>
>     """
>     try:
>         profile_obj = request.user.get_profile()
>     except ObjectDoesNotExist:
>         return
> HttpResponseRedirect(reverse('profiles_create_profile'))
>
> I should have said that I am passing the form class like so:
>
> from django.conf.urls.defaults import *
> from profiles import views
> from django.contrib.auth.decorators import login_required
> from userinfo.forms import ProfileForm
>
> #the urls for the login sections of the site
>
> urlpatterns = patterns('',
>                        url(r'^edit/$',
>                            login_required(views.edit_profile),
> {'form_class':ProfileForm},
>                            name='profiles_edit_profile'),
>                        url(r'^(?P<username>\w+)/$',
>                            login_required(views.profile_detail),
>                            name='profiles_profile_detail'),
>                        )
>
> On Jul 15, 2:40 am, Subhranath Chunder <subhran...@gmail.com> wrote:
>
> > Could you provide the code for the custom ProfileForm class and the views
> > first.
>
> > Thanks,
> > Subhranath Chunder.
>
> > On Thu, Jul 15, 2010 at 2:49 AM, Ricko <rickentr...@gmail.com> wrote:
> > > Using ubernostroms Django Registration app coupled with his Profile
> > > app, both highly recommended, got the default app up and running no
> > > problems at all.
> > > I'm unable to override any default behaviour the proper way, as I
> > > can't seem to pass any extra parameters through the urls.py file. Here
> > > is my urls:
>
> > > from django.conf.urls.defaults import *
> > > from profiles import views
> > > from django.contrib.auth.decorators import login_required
> > > from userinfo.forms import ProfileForm
>
> > > urlpatterns = patterns('',
> > >                       url(r'^edit/$',
> > >                           login_required(views.edit_profile),
> > > {'form_class' : ProfileForm},
> > >                           name='profiles_edit_profile'),
> > >                       url(r'^(?P<username>\w+)/$',
> > >                           login_required(views.profile_detail),
> > >                           name='profiles_profile_detail'),
> > >                       )
>
> > > I have my custom form class ProfileForm. When I try this I get a
> > > stack:
>
> > > Original Traceback (most recent call last):
> > >  File "/Library/Python/2.5/site-packages/django/template/debug.py",
> > > line 71, in render_node
> > >    result = node.render(context)
> > >  File "/Library/Python/2.5/site-packages/django/template/
> > > defaulttags.py", line 155, in render
> > >    nodelist.append(node.render(context))
> > >  File "/Library/Python/2.5/site-packages/django/template/debug.py",
> > > line 87, in render
> > >    output = force_unicode(self.filter_expression.resolve(context))
> > >  File "/Library/Python/2.5/site-packages/django/utils/encoding.py",
> > > line 71, in force_unicode
> > >    s = unicode(s)
> > > TypeError: unbound method __unicode__() must be called with
> > > ProfileForm instance as first argument (got nothing instead)
>
> > > Now, the docs say to pass in the Class name, and the stack seems to be
> > > saying I need an Instance? Whatever extra parameter I pass I get the
> > > same error.
>
> > > What am I doing wrong?
>
> > > --
> > > 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<django-users%2bunsubscr...@googlegroups.com>
> > > .
> > > For more options, visit this group at
> > >http://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