- September 10, 2011
- 0 (after 0 ratings)
A project I'm working on requires multiple different classes of users, all with different fields/attributes. Having a single UserProfile class with a generic relation was a complete pain in practice.
So, I changed my classes to all subclass User directly and then used django-model-utils to create a custom ModelBackend that returns the appropriate class when accessing request.user.
The InheritanceQuerySet manager provided by django-model-utils makes it all possible and with only a single database query.
No need to add anything directly to the User class, by the way. Just subclass it directly with each of your custom classes:
class CustomUser1(User): field1 = models.CharField(...) class CustomUser2(User): field2 = models.CharField(...)
1 2 3 4 5 6 7 8 9 10 11
from django.contrib.auth.backends import ModelBackend from django.contrib.auth.models import User from model_utils.managers import InheritanceQuerySet class CustomUserModelBackend(ModelBackend): def get_user(self, user_id): try: return InheritanceQuerySet(User).select_subclasses().get(pk=user_id) except User.DoesNotExist: return None
More like this
- Browser-native date input field by kytta 1 month ago
- Generate and render HTML Table by LLyaudet 1 month, 1 week ago
- My firs Snippets by GutemaG 1 month, 1 week ago
- FileField having auto upload_to path by junaidmgithub 2 months, 2 weeks ago
- LazyPrimaryKeyRelatedField by LLyaudet 2 months, 3 weeks ago