views:

21

answers:

2
+1  Q: 

Django auth.User

Hi,

I'm developing web page with many type of users, each with different profiles properties. I would like to use built in auth system but:

a) I want to use django-registration. b) I can point User.get_profile to only one profile model.

How to accomplish that in nice fashion?

A: 

I haven't used django-registration so I don't know what it entails. For the second part of your question one way would be to

  1. Associate an UserProfile with every User
  2. Add different kinds of ProfileProperty classes and link to them from UseProfile using a generic relationship.

I know, it is a bit of a stretch.

Manoj Govindan
A: 

I'm not an expert nor in python, django or database but I encountered a somewhat similar issue few weeks ago and on #django someone advised me to use Generic relation to achieve that.

I created a UserProfile model that is liked (through a OneToOnefield) to the "true" profile, and using contrib.content-type and generic relation I'm able to use several distinct porfile types.

Note that should work for you if you don't fear to hit you database one more time on each get_profile().

An alternative would be to create a big table that contain all the field for all the profile type and using some kind of hook (or reimplementing a custom save()) to check the retired fields according the profile type. But it look complicated to me, especially if you want to have a lot of different profile type.

Another alternative could be to create a TextField derivated custom field and use it as a storage for a dictionary that you pickle to it on save and unpickle from it on load. With some hacking you could certainly map some of the model attribute to the dictionary key. That would allow a lot of flexibility.

Free hint for ya : I also use fixtures to test my application and forgot to check if the raw parameter of the post_save signal was True to prevent executing the UserProfile creation when using manage.py loaddata. As I had coded the creation of the "true" profile in my post_save callback the exception what kind of weird until I find out what was happening.

Usefull ressource :

thomas