> Note that EmailUser *doesn't* have a Meta: swappable definition. There is nothing on this model that says "I am swappable", or "I am an appropriate substitute for User".
Ah, this is were the misunderstanding was. authtools does actually set swappable on its replacement user, too[1]. The two definitions look like this: class User(Model): username = models.CharField() USERNAME_FIELD = 'username' class Meta: swappable = 'AUTH_USER_MODEL' class EmailUser(Model): email = models.CharField() USERNAME_FIELD = 'email' class Meta: swappable = 'AUTH_USER_MODEL' > How does Django identify that EmailUser *shouldn't* be synchronised to the database? The existing swappable mechanism takes care of it. Only the model referenced by settings.AUTH_USER_MODEL will be installed, not both. > we still have a problem -- We can't just say "contrib.auth.forms.AuthenticationForm", because this form needs to change depending on the model that is in use. We have similar problems with admin, and potentially with views and URLs. It's straightforward to make the forms, views, and URLs work without checking what user model is installed, and this is the approach authtools takes. We can agree that code like `if settings.AUTH_USER_MODEL == auth.EmailUser"` is absolutely awful, so it's nice that it's not required to implement forms that work with custom user models. The forms from authtools will work with any user model, not just authtools.User and auth.User. It doesn't use any ugly switches on the type of the installed user model to do it either. (Note: the views and URLs don't actually have to change to accommodate EmailUser. authtools ships with the CBV auth views simply because #17209[2] has stalled.) [1]: https://github.com/fusionbox/django-authtools/blob/master/authtools/models.py#L86 [2]: https://code.djangoproject.com/ticket/17209 -- You received this message because you are subscribed to the Google Groups "Django developers" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-developers+unsubscr...@googlegroups.com. To post to this group, send email to django-developers@googlegroups.com. Visit this group at http://groups.google.com/group/django-developers. For more options, visit https://groups.google.com/groups/opt_out.