title: django admin for multiple user types
body: <p>I've an app that deals with multiple user types. I need a way for differentiating them in the admin site. Some code to illustrate.</p>
  
  <p>First I created a <em>User</em> model class that inherits from <em>AbstractUser</em></p>
  
  <pre><code>class User(AbstractUser):
      is_partner = models.BooleanField(default=False)
      is_client = models.BooleanField(default=False)
      email = models.EmailField(unique=True)
  </code></pre>
  
  <p>Partners and Clients users has different data:</p>
  
  <pre><code>class ClientProfile(models.Model):
      user = models.OneToOneField(User, on_delete=models.CASCADE)
      ...
  
  class PartnerProfile(models.Model):
      user = models.OneToOneField(User, on_delete=models.CASCADE)
      ...
  </code></pre>
  
  <p>Client profile is created through SignUp form I provide, after that, users can update their own profile. In the other hand, Partner profile is created by myself as admin, and I need to do it through django admin site.</p>
  
  <p>So, how do I register two version of the same model? and provide different names for showing in the admin index?</p>
  
  <p>What I did was to change just the <code>queryset</code> in the <em>ModelAdmin</em> class, and register it twice, one for Client and another for Partner but it raises me 
  <strong>django.contrib.admin.sites.AlreadyRegistered</strong></p>
  
  <pre><code>class ClientProfileInline(admin.StackedInline):
      model = ClientProfile
      can_delete = False
      verbose_name_plural = 'Client Profile'
      fk_name = 'user'
  
  
  class ClientUserAdmin(UserAdmin):
      inlines = (ClientProfileInline, )
  
      def get_queryset(self, request):
          qs = super().get_queryset(request)
          return qs.filter(is_client=True)#HERE it is the flag for differentiating between Client and Partner
  
      def get_inline_instances(self, request, obj=None):
          if not obj:
              return list()
          return super(ClientUserAdmin, self).get_inline_instances(request, obj)
  
   ...as this with PartnerUserAdmin...
  
  admin.site.register(User, PartnerUserAdmin)
  admin.site.register(User, ClientUserAdmin)
  </code></pre>