On 2 mar, 00:50, Jeremiah <wanderinweez...@gmail.com> wrote:
> Hi All,
>
> So, if I do the following from the shell (as spawned by manage.py):
> >>> import cc.models

What does cc.models.UserProfile looks like ?

> >>> from django.contrib.auth.models import User
> >>> u = User.objects.get(username__exact="duh3")
> >>> try:
>
> ...     u.userprofile
> ... except:

This should be :

  ... except cc.models.UserProfile.DoesNotExist:


As a general rule:
* NEVER use a bare except clause unless you reraise the SAME exception
in the except block.
* always catch the most specific exception type.


> ...     profile = cc.models.UserProfile()
> ...     profile.user = u
> ...     profile.thing = "Test"
> ...     profile.save()
> ...

(snip)

> I can get the profile to work.  So, then I add the following lines to
> my "models.py" file:
> from django.db.models.signals import post_save
> ...
> def profile_handler(sender, **kwargs):
>         """ Signal handler to deal with a save on the User model """
>         try:
>                 sender.userprofile
>         except:
>                 profile = cc.models.UserProfile()

Given the above statement, I assume the "models.py" file you're
talking about is not the one where you define your UserProfile class.
If yes - you may have legitimate reasons to split this between
different apps -, are you sure the models.py file where you set up
this signal handler is correctly registered and imported ? (hint: is
the app containing this models.py in your settings.INSTALLED_APPS ?)

FWIW, you can insert print statements (poor man logging) in your
models.py file to make sure it's imported and check if the signal
handler is executed:

# wherever/models.py
from django.db.models.signals import post_save

print "in %s" % __name__

def profile_handler(sender, **kwargs):
    """ Signal handler to deal with a save on the User model """
    try:
        p = sender.userprofile
        print "in %s : for user %s, profile %s already exists" %
(__name__, sender, p)
    except cc.models.UserProfile.DoesNotExist:
        profile = cc.models.UserProfile(user=sender)
        profile.save()
        print "in %s : for user %s, created profile %s " % (__name__,
sender, p)
    except Exception, e:
        print "in %s : for user %s, got unexpected exception %s" %
(__name__, sender, e)
        raise

print "in %s : connecting profile_handler to post_save signal" %
__name__
post_save.connect(profile_handler, sender=User)
print "in %s : connected profile_handler to post_save signal" %
__name__


Running this with the builtin dev server should provide some useful
informations about your problem.

<OT>While we're at it, the pythonic convention for indentations is 4-
spaces, no tabs</OT>

HTH

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@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