How to use a custom user model¶
You can specify a custom user model in the
Oscar will dynamically adjust the account profile summary view and
profile editing form to use the fields from your custom model.
Before Django 1.5, the recommended technique for adding fields to users was to
use a one-to-one “profile” model specified in the
While this setting was removed from Django in Django 1.7, Oscar continues to
support it and will add relevant fields to the profile form.
Hence profiles can be used in combination with custom user models.
That doesn’t mean it’s a good idea.
Oscar does have some requirements on what fields a user model has. For
instance, the authentication backend requires a user to have an ‘email’ and
‘password’ field. Oscar also assumes that the
Oscar ships with its own abstract user model that supports the minimum fields and methods required for Oscar to work correctly. New Oscar projects are encouraged to subclass this User model.
It has previously been suggested to set
db_table of the model to
auth_user to avoid the migrations from breaking. This issue has been fixed
and migrations are now using
which will use
db_table name of the user model provided by
This works in the instances where you are using the default
or when you use a custom user model from the start. Switching over from
auth.User to a custom model after having applied previous migration of
Oscar will most likely require renaming the
auth_user table to the new user
table in a manual migration.
If you want to use
User model, say,
get_full_name for Asian names, a simple approach is
to create your own
# file: your-project/apps/user/models.py from django.db import models from oscar.apps.customer.abstract_models import AbstractUser class User(AbstractUser): def get_full_name(self): full_name = '%s %s' % (self.last_name.upper(), self.first_name) return full_name.strip()
Then add this
user app to the
INSTALLED_APPS list. Beside that we
need to tell
django to use our customised user model instead of the
default one as the authentication model 1:
# use our own user model AUTH_USER_MODEL = "user.User"
After the migration, a database table called
user_user will be created based
on the schema defined inside of