If you go down the user-profiles route - how would you handle managing each of those via the Django Admin?
For example - say you have 3 user "types" - each just being User, with a different profile linked to it. How would you manage each of those via the admin interface? On Mon, 19 Jun 2017 at 17:53 James Schneider <[email protected]> wrote: > > > On Jun 18, 2017 10:11 PM, "Victor Hooi" <[email protected]> wrote: > > Hi, > > Say you have multiple custom users, each inheriting from AbstractUser. The > docs mention setting AUTH_USER_MODEL: > > > https://docs.djangoproject.com/en/1.11/topics/auth/customizing/#substituting-a-custom-user-model > > However, what happens if you have *multiple* custom users - which would > you set it to? > > > The answer is to rethink your user model(s). The idea being that a 'user' > should be thought about at a very high level. > > There should only be one canon user model in use as far as system > authentication is concerned. The 'type' of user rarely warrants the use of > a separate model, rather the type would typically be made available as an > attribute of your system User (notice the capital U), restricted by either > a static list of possible choices ( > https://docs.djangoproject.com/en/1.11/ref/models/fields/#choices) or by > utilizing a foreign key to another model containing the list of potential > user types. > > Your User model (which can be named anything you like, I'm just > referencing User for brevity) should contain only a minimal amount of > information needed for authentication, and any information that would be > needed regularly on every request. > > Ideally, the User 'type' would be made a part of the User Profile, which > can be recalled quickly via a 1to1 FK relationship ( > https://docs.djangoproject.com/en/1.11/topics/auth/customizing/#extending-the-existing-user-model > ). > > One of the few cases where this information could be stored directly on > the User is when the authorization system (permissions and user tests for > access) are contingent on the 'type' of user you are examining, which > effectively turns it into a role. However, unless you have a static > (unchanging) list of user roles (which is a more apropos description > anyway), you may still consider using a M2M relationship to a role table > and update the User manager to automatically join the two tables when users > are queried. > > Having separate 'user' models as you've mentioned leads to the exact issue > you've brought up. If you are trying to find a user, you need a separate > query for every type of user you have in every location where you need a > list of users or perform searching for specific users. This causes an > artificial and unnecessary inflation of the number of queries run for each > request, and complicates the code trying to parse multiple sets of results. > > Proxy models may also be an alternative ( > https://docs.djangoproject.com/en/1.11/topics/db/models/#proxy-models). > However, those can be a bit unwieldy to handle and present the same issues > as pulling a user list. > > -James > > > > > -- > You received this message because you are subscribed to a topic in the > Google Groups "Django users" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/django-users/UrUN9PWKwMs/unsubscribe. > To unsubscribe from this group and all its topics, send an email to > [email protected]. > To post to this group, send email to [email protected]. > Visit this group at https://groups.google.com/group/django-users. > To view this discussion on the web visit > https://groups.google.com/d/msgid/django-users/CA%2Be%2BciWkc8XrQEnS9ET12Y%3D5nToFV29QTqHwOrcPMX_rvEM17g%40mail.gmail.com > <https://groups.google.com/d/msgid/django-users/CA%2Be%2BciWkc8XrQEnS9ET12Y%3D5nToFV29QTqHwOrcPMX_rvEM17g%40mail.gmail.com?utm_medium=email&utm_source=footer> > . > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/django-users. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CAMnnoUK%3Db848dQjCSUvUv45-2P8sZx1tRj-%3D0%2BzMeNA7sCiKSw%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.

