Looking tough django auth models code, I came across this bit of code:
class User(AbstractUser):
class Meta(AbstractUser.Meta):
swappable = 'AUTH_USER_MODEL'
It's obvious that it has something to do with the new AUTH_USER_MODEL setting in settings.py, but how does it actually work, by what python "trick"?
And in what other situations can it be used?
swappable is an "intentionally undocumented" feature which is currently under development / in-test. It's used to handle "I have a base abstract model which has some foreign-key relationships." Slightly more detail is available from Django's ticketing system and github. Because it's a "stealth alpha" feature, it's not guaranteed to work (for anything other than User), and understanding the detailed operation will likely require diving into source code. It works with AUTH_USER_MODEL because the User model and swappable flag were developed together, specifically for each other.
Django 1.5 added the swappable user models, so you can replace Django User model with one of your own (limit the number of characters, use email as identifier...)
More: https://docs.djangoproject.com/en/dev/releases/1.5/#configurable-user-model https://docs.djangoproject.com/en/dev/topics/auth/customizing/#auth-custom-user
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With