Re: Adding properties to models at run-time.

2008-10-31 Thread Daniel Roseman

On Oct 30, 10:13 pm, Alex G <[EMAIL PROTECTED]> wrote:
> Thanks for the reply, DR.
>
> How would I use the generic relationship without the backward link?
>
> I have the normal auth.user class, and I have the my.user class that
> extends it and has a polymorphic link pointing at auth.user.  The
> problem occurs when I collect a login/password, because I can't lookup
> my.user without the backward link, that is I can't
> my.user.filter(account__username = x, account__password = y) because
> polymorphic links don't allow this.  I also can't move in reverse, the
> auth.user.authenticate(username, password) function returns an
> auth.user, and I am unclear as to how I would get a my.user from this
> information without calling for my.user.objects.all() and comparing
> the link (which seems terribly, terribly inefficient...).  Is there a
> way to start with the target (auth.user) and get to my.user backward
> via the contenttype?

Something like (where 'dj_user' is the instance of
contrib.auth.models.User):

User.objects.get(account_id=dj_user.id,
account_polymorphic_link=ContentType.objects.get_for_model(dj_user))
--
DR.
--~--~-~--~~~---~--~~
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 [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~--~~~~--~~--~--~---



Re: Adding properties to models at run-time.

2008-10-30 Thread Alex G

Thanks for the reply, DR.

How would I use the generic relationship without the backward link?

I have the normal auth.user class, and I have the my.user class that
extends it and has a polymorphic link pointing at auth.user.  The
problem occurs when I collect a login/password, because I can't lookup
my.user without the backward link, that is I can't
my.user.filter(account__username = x, account__password = y) because
polymorphic links don't allow this.  I also can't move in reverse, the
auth.user.authenticate(username, password) function returns an
auth.user, and I am unclear as to how I would get a my.user from this
information without calling for my.user.objects.all() and comparing
the link (which seems terribly, terribly inefficient...).  Is there a
way to start with the target (auth.user) and get to my.user backward
via the contenttype?

I know about AUTH_PROFILE_MODULE, but the problem is that the goal is
to have multiple user classes.  Ideally there would be a way to
specify the user model as an attribute of the auth.user model (which
would be the heretofore missing backward link), but barring that this
isn't much use to me because the AUTH_PROFILE_MODULE would have
multiple values.

Any clues?

Thanks,

Alex.



On Oct 30, 4:33 pm, Daniel Roseman <[EMAIL PROTECTED]>
wrote:
> On Oct 30, 8:11 pm, Alex G <[EMAIL PROTECTED]> wrote:
>
>
>
> > Hi,
>
> > I've been trying for some time to create a polymorphic link with a
> > backwards-link from the associated model.  The problem is the model is
> > django.contrib.auth.models.User...  Is there any way to add this
> > functionality without changing the django core?  Trying to call
> > setattr(django.contrib.auth.models.User, 'target',
> > generic.GenericRelation(MyUser) does not work.  It instantiates an
> > attribute named 'target', but it doesn't work in the manner
> > intended...
>
> > from django.contrib.auth.models import User as Account
> > from django.contrib.contenttypes.models import ContentType
> > from django.contrib.contenttypes import generic
> > class User(models.Model):
> >         account_polymorphic_link = models.ForeignKey(ContentType)
> >         account_id = models.PositiveIntegerField()
> >         account = generic.GenericForeignKey('account_polymorphic_link',
> > 'account_id')
>
> > setattr(Account, 'target', generic.GenericRelation(User)) #this
> > doesn't seem to work
>
> > My problem is that I'm using auth.User (Account in the above example)
> > to store username/password and to leverage permissions and such, but I
> > can't look someone up by username and get at the information in my
> > derivative class...
>
> > Does anyone have any ideas/suggestions?
>
> > Thank you,
>
> > Alex.
>
> Well, you can use generic relations without the backwards link, by
> simply looking up the content_type/object_id in the related class.
>
> But for your use case, a much better way is to use the built-in
> AUTH_PROFILE_MODULE setting, which allows you to nominate a class
> which extends User, and enables a user.get_profile() method. 
> Seehttp://docs.djangoproject.com/en/dev/topics/auth/#storing-additional-...
>
> --
> DR.
--~--~-~--~~~---~--~~
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 [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~--~~~~--~~--~--~---



Re: Adding properties to models at run-time.

2008-10-30 Thread Daniel Roseman

On Oct 30, 8:11 pm, Alex G <[EMAIL PROTECTED]> wrote:
> Hi,
>
> I've been trying for some time to create a polymorphic link with a
> backwards-link from the associated model.  The problem is the model is
> django.contrib.auth.models.User...  Is there any way to add this
> functionality without changing the django core?  Trying to call
> setattr(django.contrib.auth.models.User, 'target',
> generic.GenericRelation(MyUser) does not work.  It instantiates an
> attribute named 'target', but it doesn't work in the manner
> intended...
>
> from django.contrib.auth.models import User as Account
> from django.contrib.contenttypes.models import ContentType
> from django.contrib.contenttypes import generic
> class User(models.Model):
>         account_polymorphic_link = models.ForeignKey(ContentType)
>         account_id = models.PositiveIntegerField()
>         account = generic.GenericForeignKey('account_polymorphic_link',
> 'account_id')
>
> setattr(Account, 'target', generic.GenericRelation(User)) #this
> doesn't seem to work
>
> My problem is that I'm using auth.User (Account in the above example)
> to store username/password and to leverage permissions and such, but I
> can't look someone up by username and get at the information in my
> derivative class...
>
> Does anyone have any ideas/suggestions?
>
> Thank you,
>
> Alex.

Well, you can use generic relations without the backwards link, by
simply looking up the content_type/object_id in the related class.

But for your use case, a much better way is to use the built-in
AUTH_PROFILE_MODULE setting, which allows you to nominate a class
which extends User, and enables a user.get_profile() method. See
http://docs.djangoproject.com/en/dev/topics/auth/#storing-additional-information-about-users

--
DR.
--~--~-~--~~~---~--~~
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 [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~--~~~~--~~--~--~---