Thursday, May 29, 2014

How to create a custom user model ?

Hi Guys,

I've developed a couple of website using Django, but this is the first time I must develop one that integrates a user authentication process and the possibility to have some roles.
Thanks to Django's flexibility, it looks like very easy to do it and pretty straightforward.
From my understanding there are two ways to extend Django's User Modl:
  • The firs one uses the AbstractUser class and allow to extends the current Django's User Model by adding some additional profile information
  • The second one uses AbstractBaseUser that only keeps the most important fields of the Django's User Model (e.g. password)

For my project, I've followed the documentation and I've extended the current Django's User Modelusing the AbstractUser class.
Lets take the following example of a user and for all of them a company :

In one of my model :
class CustomUser(AbstractUser):
        company_name = models.CharField(max_length=255)

In my settings.py:
AUTH_USER_MODEL = 'myCustomuserApp.CustomUser'

Then I use the syncdb command line, to update my database. Regarding this process I've got a couple of questions:
  1. After the syncdb command I can't see anymore the users in the admin interface. As I'm using the AbstractUser, I thought in the beginning that everything will stay as it was before (without any custom model) and the new fields would been automatically added to the User Model. But, it looks like even with AbstractUser, Im' overwriting the current Django's User Model so I must manually add it register this model in my admin Django's part: admin.site.register(CustomUser). Is it the right process to do this ?
  2. After my new model has been registered in the admin interface, I can see the list of my users, but when I try to add a new one using the admin interface Django generates an error. I suppose that I must probably create my own creation and change forms.

But before I go any further, I just want to be sure that I'm doing the right thing. From what I was understanding, by using the AbstractUser I would not have to do any changes to the core structure of my database (basically everything would stay the same, and the new fields would have been added to the core auth user table). So I was thinking that I don't need as well to implement new forms and the only time I need to do that it's when I use the AbstractBaseUser class. It looks like I'm wrong.

So could someone please tell me the difference between this two classes (AbstractUser , AbstractBaseUser ) ?

And if I need to implement the creation and modification form, do you have any good (and simple) example on how to do this ?


Thanks a lot for your advices.

Regards,

Arnaud





--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/64089beb-71e4-4a76-829b-0ecb27ff9162%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

No comments:

Post a Comment