When to use get_user_model()

488 views
Skip to first unread message

tango ward

unread,
Feb 17, 2018, 5:41:12 PM2/17/18
to django...@googlegroups.com

Hi,

I am playing around with user registration. I came across a code where the get_user_model() was assigned to a model in Meta class inside a form. I was just wondering, what is the benefit of using the get_user_model() as Model in a form instead of importing a class from models.py then use that class as model of the form and when should I use it?

models.py
class RegUser(User):

    def __str__(self):
        return self.username

forms.py

class UserCreateForm(UserCreationForm):

    class Meta:
        fields = ('username', 'password1', 'password2')
        model = get_user_model()


Thanks,
Jarvis

tango ward

unread,
Feb 17, 2018, 5:44:34 PM2/17/18
to django...@googlegroups.com
I also checked the documentation of it but I am confuse. It says "Instead of referring to User directly, you should reference the user model using django.contrib.auth.get_user_model(). This method will return the currently active user model – the custom user model if one is specified, or User otherwise." When it says "currently active user mode" is it the model that I created in models.py or the one that is currently logged in to the website? what does "or User otherwise" mean?

My apologies for asking too many questions.

Xavier Paniello

unread,
Feb 18, 2018, 8:30:54 AM2/18/18
to Django users
Hi tangoward15,

The User model by default is auth.User, but you can define a custom one and reference it at settings:
https://docs.djangoproject.com/en/2.0/ref/settings/#auth-user-model

So, get_user_model() will return the model defined at AUTH_USER_MODEL setting.

Salut!

El dissabte, 17 febrer de 2018 23:44:34 UTC+1, tangoward15 va escriure:

Mukul Agrawal

unread,
Feb 18, 2018, 8:42:09 AM2/18/18
to django...@googlegroups.com
The answer on this link can also help you in why and when to use get_user_model(). 

--
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...@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CAA6wQL%2Bq1kQ7ukjtE3gV64iu9y2SXdgojZXBF3R46BCuTN0xoA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

tango ward

unread,
Feb 18, 2018, 9:23:53 AM2/18/18
to django...@googlegroups.com
@Mukul Agrawal,

thanks, i'll read this.


@Xavier,

the model in forms.py, does it mean it will use the RegUser class from the models.py? Sorry, I am confuse.

Xavier Paniello

unread,
Feb 19, 2018, 12:02:31 AM2/19/18
to Django users
Hi tangoward15,

Django will use auth.User as the user model in the system, unless you change AUTH_USER_MODEL = RegUser in settings.py

Be carefull, to change the user model has some particularities you can read in docs (warning section):
https://docs.djangoproject.com/en/2.0/ref/settings/#auth-user-model

Other option to extend auth.User is a model with a one2one field related to auth.User, or a proxy model:
https://simpleisbetterthancomplex.com/tutorial/2016/07/22/how-to-extend-django-user-model.html

Salut!


El diumenge, 18 febrer de 2018 15:23:53 UTC+1, tangoward15 va escriure:
@Mukul Agrawal,

thanks, i'll read this.


@Xavier,

the model in forms.py, does it mean it will use the RegUser class from the models.py? Sorry, I am confuse.
On Sun, Feb 18, 2018 at 9:41 PM, Mukul Agrawal <amuk...@gmail.com> wrote:
The answer on this link can also help you in why and when to use get_user_model(). 
On Feb 18, 2018 4:11 AM, "tango ward" <tango...@gmail.com> wrote:

Hi,

I am playing around with user registration. I came across a code where the get_user_model() was assigned to a model in Meta class inside a form. I was just wondering, what is the benefit of using the get_user_model() as Model in a form instead of importing a class from models.py then use that class as model of the form and when should I use it?

models.py
class RegUser(User):

    def __str__(self):
        return self.username

forms.py

class UserCreateForm(UserCreationForm):

    class Meta:
        fields = ('username', 'password1', 'password2')
        model = get_user_model()


Thanks,
Jarvis

--
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...@googlegroups.com.

To post to this group, send email to django...@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.

--
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...@googlegroups.com.

To post to this group, send email to django...@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.

tango ward

unread,
Feb 19, 2018, 9:47:34 PM2/19/18
to django...@googlegroups.com
Thanks Xavier

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...@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.

Scot Hacker

unread,
Feb 21, 2018, 2:25:23 AM2/21/18
to Django users
It's good future-proofing, in case you ever change the User model in your project. In real life, that's highly unlikely, but where it's *really important* to use get_user_model() is when you are writing reusable apps for distribution. If your app is intended to be dropped into any existing Django project, you have no idea what User model is in use by other people's projects. This layer of abstraction makes it possible for re-usable apps that depend on some User model existing to work no matter what.

./s
Reply all
Reply to author
Forward
0 new messages