Django User model, adding function
You can add a method to the User
from django.contrib import authauth.models.User.add_to_class('get_related_foo_models', get_related_foo_models)
Make sure, you have this code within the models.py or some other file which gets imported in the startup of django.
This is an update of @Lakshman Prasad's answer. But a full example:
create a file monkey_patching.py
in any of your apps
::
#app/monkey_patching.pyfrom django.contrib.auth.models import User def get_user_name(self): if self.first_name or self.last_name: return self.first_name + " " + self.last_name return self.usernameUser.add_to_class("get_user_name",get_user_name)
and import it in app's __init__.py
file. ie::
#app/__init__.pyimport monkey_patching
It's not unusual to substitute user model as it is stated in the docs: https://docs.djangoproject.com/es/1.9/topics/auth/customizing/#substituting-a-custom-user-model, so, having this into account, it is better to get the user model class with the following code:
from django.contrib.auth import get_user_modelUserModel = get_user_model()
Afterwards, you can use this UserModel
to add functionality as @Lakshman Prasad suggests: UserModel.add_to_class('get_related_foo_models', get_related_foo_models)
.
In order to get the code executed only once I prefer to use Django application config classes (https://docs.djangoproject.com/es/1.9/ref/applications/), so a full working example will be:
# myapp/__init__.pydefault_app_config = 'myapp.apps.MyAppConfig'# myapp/apps.pyfrom django.apps import AppConfigfrom django.contrib.auth import get_user_modelclass MyAppConfig(AppConfig): name = 'myapp' verbose_name = 'MyApp' def ready(self): # Add some functions to user model: def custom_function(self): # Do whatsoever pass UserModel = get_user_model() UserModel.add_to_class('custom_function', custom_function)