title: Django 1.8.6 LookupError: App doesn't have a user model
body: <p>I am creating custom user model in app main and using the same for admin as well as python social auth.
  When I run my first migration everything works well, However if I try to run manage.py migrate again it throws app can not find User model.</p>
  
  <p>I have already configured :
  1. Installed app in settings.py
  2. Set user model in AUTH_USER_MODEL and SOCIAL_AUTH_USER_MODEL</p>
  
  <p>Following is my code :
  main/models</p>
  
  <pre><code>from django.db import models
  
  # Create your models here.
  from django.contrib.auth.models import AbstractBaseUser,BaseUserManager,PermissionsMixin
  from django.utils import timezone
  from django.core import validators
  from django.utils.translation import ugettext_lazy as _
  from django.conf import settings
  
  class CustomUserManager(BaseUserManager):
  
      def _create_user(self, email,username, password,
                       is_staff, is_superuser, **extra_fields):
          """
          Creates and saves a User with the given username, email and password.
          """
          now = timezone.now()
          if not email:
              raise ValueError('The given username must be set')
          email = self.normalize_email(email)
          user = self.model(email=email,username=username,
                            is_staff=is_staff, is_active=True,
                            is_superuser=is_superuser, last_login=now,
                            date_joined=now, **extra_fields)
          user.set_password(password)
          user.save(using=self._db)
          return user
  
      def create_user(self, username, email=None, password=None, **extra_fields):
          now = timezone.now()
          if not email:
              raise ValueError('The given username must be set')
          email = self.normalize_email(email)
          user = self.model(email=email,username=username,
                            is_staff=False, is_active=True,
                            is_superuser=False, last_login=now,
                            date_joined=now, **extra_fields)
          user.set_password(password)
          user.save(using=self._db)
          return user
  
      def create_superuser(self, username, email, password=None, **extra_fields):
          now = timezone.now()
          if not email:
              raise ValueError('The given username must be set')
          email = self.normalize_email(email)
          user = self.model(email=email,username=username,
                            is_staff=True, is_active=True,
                            is_superuser=True, last_login=now,
                            date_joined=now, **extra_fields)
          user.set_password(password)
          user.save(using=self._db)
          return user
  
      class Meta:
          app_label = 'main'
  
  
  class myuser(AbstractBaseUser,PermissionsMixin):
  
      GENDERS = (
          ('male', 'Male'),
          ('female', 'Female')
      )
      VISIBLE = (
          ('public', 'public'),
          ('private', 'private')
      )
      username = models.CharField(_('username'), max_length=30, unique=True,help_text=_('Required. 30 characters or fewer. Letters, digits and '
                      '@/./+/-/_ only.'),
          validators=[
              validators.RegexValidator(r'^[\w.@+-]+$', _('Enter a valid username.'), 'invalid')
          ])
  
      first_name = models.CharField(max_length=30, blank=True)
      last_name = models.CharField(max_length=30, blank=True)
      email = models.EmailField(blank=True)
      is_staff = models.BooleanField(default=False)
      is_active = models.BooleanField(_('active'), default=True)
      date_joined = models.DateTimeField(default=timezone.now)
  
      gender = models.CharField(max_length=20, null=True, blank=True,
                                choices=GENDERS)
      visibility = models.CharField(max_length=20, null=True, blank=True,
                                choices=VISIBLE,default='public')
      birthday = models.DateField(default=timezone.now)
      facebook_id = models.CharField(max_length=30, blank=True)
      city = models.CharField(max_length=250, null=True, blank=True)
      dob = models.DateField(blank=True, null=True)
      locale = models.CharField(max_length=10, blank=True, null=True)
      height = models.IntegerField(blank=True,null=True)
      weight = models.IntegerField(blank=True,null=True)
      profile_photo = models.ImageField(upload_to=settings.STATIC_ROOT+'profiles/',null=True)
  
      USERNAME_FIELD = 'username'
      REQUIRED_FIELDS = ['email']
      objects = CustomUserManager()
  
      def __unicode__(self):
          return self.username
  
      def save(self, *args, **kwargs):
          """ ensure instance has usable password when created """
          if not self.pk and self.has_usable_password() is False:
              self.set_password(self.password)
  
          super(myuser, self).save(*args, **kwargs)
      def get_gender(self):
          "Returns the short name for the user."
          return self.gender
      def get_short_name(self):
          "Returns the short name of user"
          return self.first_name
  
      def get_profile_photo(self):
          "Returns the short name of user"
          return self.profile_photo
  
      class Meta:
          app_label = 'main'
  </code></pre>
  
  <p>main/admins.py</p>
  
  <pre><code>from django.contrib import admin
  from django.contrib.auth.admin import UserAdmin
  from django.contrib.auth.models import Group
  from django.contrib.auth.forms import UserChangeForm,UserChangeForm, UserCreationForm
  from main.models import myuser
  from django import forms
  from django.utils.translation import gettext as _
  
  class MyUserChangeForm(UserChangeForm):
      class Meta(UserChangeForm.Meta):
          model = myuser
  
  class MyUserCreationForm(UserCreationForm):
      class Meta(UserCreationForm.Meta):
          model = myuser
  
      def clean_username(self):
          username = self.cleaned_data['username']
          try:
              myuser.objects.get(username=username)
          except myuser.DoesNotExist:
              return username
          raise forms.ValidationError(self.error_messages['duplicate_username'])
  
  class MyUserAdmin(UserAdmin):
      form = MyUserChangeForm
      add_form = MyUserCreationForm
      fieldsets = (
          (None, {'fields': ('username', 'password')}),
          (_('Personal info'), {'fields': ('first_name', 'last_name', 'email','birthday','gender','city','visibility')}),
          (_('Permissions'), {'fields': ('is_active', 'is_staff', 'is_superuser',
                                         'groups', 'user_permissions')}),
          (_('Important dates'), {'fields': ('last_login', 'date_joined')}),
      )
      add_fieldsets = (
          (None, {
              'classes': ('wide',),
              'fields': ('username', 'password1', 'password2')}
          ),
      )
      list_display = ('username', 'email', 'first_name', 'last_name', 'is_staff')
      list_filter = ('is_staff', 'is_superuser', 'is_active', 'groups')
      search_fields = ('username', 'first_name', 'last_name', 'email')
      ordering = ('username',)
      filter_horizontal = ('groups', 'user_permissions',)
  
  
  admin.site.register(myuser, MyUserAdmin)
  admin.site.unregister(Group)
  </code></pre>
  
  <p>settings.py</p>
  
  <pre><code>INSTALLED_APPS = (
      'grappelli',
      'django.contrib.admin',
      'django.contrib.auth',
      'django.contrib.contenttypes',
      'django.contrib.sessions',
      'django.contrib.messages',
      'django.contrib.staticfiles',
      'main',
      'registration',
      'profiles',
      'crispy_forms',
      'social.apps.django_app.default',
  )
  
  AUTHENTICATION_BACKENDS = (
     'social.backends.facebook.FacebookOAuth2',
     'social.backends.google.GoogleOAuth2',
     'social.backends.twitter.TwitterOAuth',
     'social.backends.instagram.InstagramOAuth2',
     'social.backends.fitbit.FitbitOAuth',
     'django.contrib.auth.backends.ModelBackend',
  )
  
  AUTH_USER_MODEL = 'main.myuser'
  
  SOCIAL_AUTH_USER_MODEL = 'main.myuser'
  </code></pre>
  
  <p>Error Log :</p>
  
  <pre><code># python manage.py migrate
  
  /var/webapp/fit_env/lib/python3.4/site-packages/django/contrib/sites/models.py:78: RemovedInDjango19Warning: Model class django.contrib.sites.models.Site doesn't declare an explicit app_label and either isn't in an application in INSTALLED_APPS or else was imported before its application was loaded. This will no longer be supported in Django 1.9.
    class Site(models.Model):
  
  Operations to perform:
    Synchronize unmigrated apps: messages, staticfiles, crispy_forms, grappelli
    Apply all migrations: sessions, auth, default, registration, contenttypes, main, admin
  Synchronizing apps without migrations:
    Creating tables...
      Running deferred SQL...
    Installing custom SQL...
  Running migrations:
    Rendering model states...Traceback (most recent call last):
    File "/var/webapp/fit_env/lib/python3.4/site-packages/django/apps/config.py", line 159, in get_model
      return self.models[model_name.lower()]
  KeyError: 'user'
  
  During handling of the above exception, another exception occurred:
  
  Traceback (most recent call last):
    File "/var/webapp/fit_env/lib/python3.4/site-packages/django/db/migrations/state.py", line 238, in __init__
      model = self.get_model(lookup_model[0], lookup_model[1])
    File "/var/webapp/fit_env/lib/python3.4/site-packages/django/apps/registry.py", line 202, in get_model
      return self.get_app_config(app_label).get_model(model_name.lower())
    File "/var/webapp/fit_env/lib/python3.4/site-packages/django/apps/config.py", line 162, in get_model
      "App '%s' doesn't have a '%s' model." % (self.label, model_name))
  LookupError: App 'main' doesn't have a 'user' model.
  
  During handling of the above exception, another exception occurred:
  
  Traceback (most recent call last):
    File "manage.py", line 10, in &lt;module&gt;
      execute_from_command_line(sys.argv)
    File "/var/webapp/fit_env/lib/python3.4/site-packages/django/core/management/__init__.py", line 354, in execute_from_command_line
      utility.execute()
    File "/var/webapp/fit_env/lib/python3.4/site-packages/django/core/management/__init__.py", line 346, in execute
      self.fetch_command(subcommand).run_from_argv(self.argv)
    File "/var/webapp/fit_env/lib/python3.4/site-packages/django/core/management/base.py", line 394, in run_from_argv
      self.execute(*args, **cmd_options)
    File "/var/webapp/fit_env/lib/python3.4/site-packages/django/core/management/base.py", line 445, in execute
      output = self.handle(*args, **options)
    File "/var/webapp/fit_env/lib/python3.4/site-packages/django/core/management/commands/migrate.py", line 222, in handle
      executor.migrate(targets, plan, fake=fake, fake_initial=fake_initial)
    File "/var/webapp/fit_env/lib/python3.4/site-packages/django/db/migrations/executor.py", line 100, in migrate
      state.apps  # Render all real_apps -- performance critical
    File "/var/webapp/fit_env/lib/python3.4/site-packages/django/utils/functional.py", line 59, in __get__
      res = instance.__dict__[self.name] = self.func(instance)
    File "/var/webapp/fit_env/lib/python3.4/site-packages/django/db/migrations/state.py", line 166, in apps
      return StateApps(self.real_apps, self.models)
    File "/var/webapp/fit_env/lib/python3.4/site-packages/django/db/migrations/state.py", line 248, in __init__
      raise ValueError(msg.format(field=operations[0][1], model=lookup_model))
  ValueError: Lookup failed for model referenced by field default.UserSocialAuth.user: main.User
  </code></pre>