Custom User Model ValueError: Related Model Django(1.9)
Question: There is an error when I try to add CustomUser model as ForiegnKey to a field
in django. The authentication is working using the CustomUser model but for
some reason I have getting this error:

    
    
    ValueError: Related model 'authentication.UserModel' cannot be resolved
    

Here is the app/models.py:

    
    
     from django.db import models
     from django.conf import settings
    
    
    
     class A(models.Model)
        tender_authority = models.ForeignKey(settings.AUTH_USER_MODEL)
    

Here is the settings.py

    
    
    AUTH_USER_MODEL = 'authentication.UserModel'
    

Here is the tree structure of the project:

    
    
    myproject
       settings.py
    authentication
       models.py ---> UserModel (my custom user model name) Model is present here
    myapp
       models.py ---> Error happening here
    

Thank you in advance.

Full Trace back, forgot to mention that this is happening while I am trying to
migrate:

    
    
    Operations to perform:
      Apply all migrations: auth, admin, authentication, contenttypes,         sessions, Forms
    Running migrations:
       Rendering model states... DONE
       Applying Forms.0010_tech_auth_Usermodel_to_User...Traceback (most recent call last):
     File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
     File "/usr/local/lib/python3.5/dist-packages/django/core/management/__init__.py", line 353, in execute_from_command_line
    utility.execute()
      File "/usr/local/lib/python3.5/dist-packages/django/core/management/__init__.py", line 345, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
      File "/usr/local/lib/python3.5/dist-packages/django/core/management/base.py", line 348, in run_from_argv
    self.execute(*args, **cmd_options)
      File "/usr/local/lib/python3.5/dist-packages/django/core/management/base.py", line 399, in execute
    output = self.handle(*args, **options)
      File "/usr/local/lib/python3.5/dist-packages/django/core/management/commands/migrate.py", line 200, in handle
    executor.migrate(targets, plan, fake=fake, fake_initial=fake_initial)
      File "/usr/local/lib/python3.5/dist-packages/django/db/migrations/executor.py", line 92, in migrate
    self._migrate_all_forwards(plan, full_plan, fake=fake, fake_initial=fake_initial)
      File "/usr/local/lib/python3.5/dist-packages/django/db/migrations/executor.py", line 121, in _migrate_all_forwards
    state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
      File "/usr/local/lib/python3.5/dist-packages/django/db/migrations/executor.py", line 198, in apply_migration
    state = migration.apply(state, schema_editor)
      File "/usr/local/lib/python3.5/dist-packages/django/db/migrations/migration.py", line 123, in apply
    operation.database_forwards(self.app_label, schema_editor, old_state, project_state)
      File "/usr/local/lib/python3.5/dist-packages/django/db/migrations/operations/fields.py", line 201, in database_forwards
    schema_editor.alter_field(from_model, from_field, to_field)
      File "/usr/local/lib/python3.5/dist-packages/django/db/backends/base/schema.py", line 454, in alter_field
    new_db_params = new_field.db_parameters(connection=self.connection)
      File "/usr/local/lib/python3.5/dist-packages/django/db/models/fields/related.py", line 967, in db_parameters
    return {"type": self.db_type(connection), "check": []}
      File "/usr/local/lib/python3.5/dist-packages/django/db/models/fields/related.py", line 958, in db_type
    rel_field = self.target_field
      File "/usr/local/lib/python3.5/dist-packages/django/db/models/fields/related.py", line 861, in target_field
    return self.foreign_related_fields[0]
      File "/usr/local/lib/python3.5/dist-packages/django/db/models/fields/related.py", line 594, in foreign_related_fields
    return tuple(rhs_field for lhs_field, rhs_field in self.related_fields if rhs_field)
      File "/usr/local/lib/python3.5/dist-packages/django/db/models/fields/related.py", line 581, in related_fields
    self._related_fields = self.resolve_related_fields()
      File "/usr/local/lib/python3.5/dist-packages/django/db/models/fields/related.py", line 566, in resolve_related_fields
    raise ValueError('Related model %r cannot be resolved' % self.remote_field.model)
    ValueError: Related model 'authentication.UserModel' cannot be resolved
    

Migration:

'

class Migration(migrations.Migration):

    
    
    dependencies = [
        ('Forms', '0009_revised_tender_changes'),
    ]
    
    operations = [
        migrations.AlterField(
            model_name='agreementsanctionmodel',
            name='bank_details_one',
            field=models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, to='Forms.BankDetailsModel', verbose_name='Bank Details'),
        ),
        migrations.AlterField(
            model_name='agreementsanctionmodel',
            name='contractor',
            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='Forms.Contractor', verbose_name='Contractor'),
        ),
        migrations.AlterField(
            model_name='agreementsanctionmodel',
            name='contractor_name',
            field=models.CharField(blank=True, max_length=250, verbose_name='Contractor'),
        ),
        migrations.AlterField(
            model_name='agreementsanctionmodel',
            name='created_on',
            field=models.DateTimeField(auto_now=True, verbose_name='Created On'),
        ),
        migrations.AlterField(
            model_name='agreementsanctionmodel',
            name='financial_year',
            field=models.CharField(blank=True, max_length=5, verbose_name='Financial Year'),
        ),
        migrations.AlterField(
            model_name='agreementsanctionmodel',
            name='tender',
            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='Forms.Tender', verbose_name='Tender'),
        ),
        migrations.AlterField(
            model_name='agreementsanctionmodel',
            name='tender_name',
            field=models.CharField(blank=True, max_length=50, unique=True, verbose_name='Tender'),
        ),
        migrations.AlterField(
            model_name='agreementsanctionmodel',
            name='updated_on',
            field=models.DateField(blank=True, default=None, null=True, verbose_name='Updated On'),
        ),
        migrations.AlterField(
            model_name='consultant',
            name='districts',
            field=models.CharField(max_length=50, null=True, verbose_name='District'),
        ),
        migrations.AlterField(
            model_name='consultant',
            name='email',
            field=models.EmailField(blank=True, max_length=254, null=True, unique=True, verbose_name='Email ID'),
        ),
        migrations.AlterField(
            model_name='consultant',
            name='first_name',
            field=models.CharField(default=0, max_length=100, verbose_name='First Name'),
            preserve_default=False,
        ),
        migrations.AlterField(
            model_name='consultant',
            name='house_number',
            field=models.CharField(blank=True, max_length=50, null=True, verbose_name='Phone Number'),
        ),
        migrations.AlterField(
            model_name='consultant',
            name='last_name',
            field=models.CharField(max_length=100, verbose_name='Last Name'),
        ),
        migrations.AlterField(
            model_name='consultant',
            name='middle_name',
            field=models.CharField(blank=True, max_length=100, null=True, verbose_name='Middle Name'),
        ),
        migrations.AlterField(
            model_name='consultant',
            name='pan_number',
            field=models.CharField(default=0, max_length=50, unique=True, verbose_name='PAN Number'),
            preserve_default=False,
        ),
        migrations.AlterField(
            model_name='consultant',
            name='state',
            field=models.CharField(max_length=50, null=True, verbose_name='State'),
        ),
        migrations.AlterField(
            model_name='consultant',
            name='street_name',
            field=models.CharField(max_length=50, null=True, verbose_name='Street Name'),
        ),
        migrations.AlterField(
            model_name='consultant',
            name='tin_number',
            field=models.CharField(default=0, max_length=10, unique=True, verbose_name='TIN Number'),
            preserve_default=False,
        ),
        migrations.AlterField(
            model_name='contractor',
            name='districts',
            field=models.CharField(max_length=50, null=True, verbose_name='District'),
        ),
        migrations.AlterField(
            model_name='contractor',
            name='email',
            field=models.EmailField(blank=True, max_length=254, null=True, unique=True, verbose_name='Email ID'),
        ),
        migrations.AlterField(
            model_name='contractor',
            name='first_name',
            field=models.CharField(max_length=100, verbose_name='First Name'),
        ),
        migrations.AlterField(
            model_name='contractor',
            name='house_number',
            field=models.CharField(blank=True, max_length=50, null=True, verbose_name='Phone Number'),
        ),
        migrations.AlterField(
            model_name='contractor',
            name='last_name',
            field=models.CharField(max_length=100, verbose_name='Last Name'),
        ),
        migrations.AlterField(
            model_name='contractor',
            name='middle_name',
            field=models.CharField(blank=True, max_length=100, null=True, verbose_name='Middle Name'),
        ),
        migrations.AlterField(
            model_name='contractor',
            name='state',
            field=models.CharField(max_length=50, null=True, verbose_name='State'),
        ),
        migrations.AlterField(
            model_name='contractor',
            name='street_name',
            field=models.CharField(max_length=50, null=True, verbose_name='Street Name'),
        ),
        migrations.AlterField(
            model_name='locationmodel',
            name='district',
            field=models.CharField(max_length=50, verbose_name='District '),
        ),
        migrations.AlterField(
            model_name='locationmodel',
            name='division',
            field=models.CharField(max_length=50, verbose_name='Division '),
        ),
        migrations.AlterField(
            model_name='locationmodel',
            name='location',
            field=models.CharField(max_length=50, verbose_name='Location'),
        ),
        migrations.AlterField(
            model_name='locationmodel',
            name='place',
            field=models.CharField(max_length=50, verbose_name='Place '),
        ),
        migrations.AlterField(
            model_name='locationmodel',
            name='work',
            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='Forms.WorkModel', verbose_name='Work'),
        ),
        migrations.AlterField(
            model_name='nominationmodel',
            name='created_on',
            field=models.DateTimeField(auto_now=True, verbose_name='Created On'),
        ),
        migrations.AlterField(
            model_name='nominationmodel',
            name='tender_authority',
            field=models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, to='Forms.TechnicalAuthority', verbose_name='Technical Authority'),
        ),
        migrations.AlterField(
            model_name='nominationmodel',
            name='updated_on',
            field=models.DateTimeField(blank=True, null=True, verbose_name='Updated On'),
        ),
        migrations.AlterField(
            model_name='nominationmodel',
            name='work_name',
            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='Forms.WorkModel', verbose_name='Work'),
        ),
        migrations.AlterField(
            model_name='pettycontractors',
            name='districts',
            field=models.CharField(max_length=50, null=True, verbose_name='District'),
        ),
        migrations.AlterField(
            model_name='pettycontractors',
            name='email',
            field=models.EmailField(blank=True, max_length=254, null=True, unique=True, verbose_name='Email ID'),
        ),
        migrations.AlterField(
            model_name='pettycontractors',
            name='first_name',
            field=models.CharField(default=0, max_length=100, verbose_name='First Name'),
            preserve_default=False,
        ),
        migrations.AlterField(
            model_name='pettycontractors',
            name='house_number',
            field=models.CharField(blank=True, max_length=50, null=True, verbose_name='Phone Number'),
        ),
        migrations.AlterField(
            model_name='pettycontractors',
            name='last_name',
            field=models.CharField(max_length=100, verbose_name='Last Name'),
        ),
        migrations.AlterField(
            model_name='pettycontractors',
            name='middle_name',
            field=models.CharField(blank=True, max_length=100, null=True, verbose_name='Middle Name'),
        ),
        migrations.AlterField(
            model_name='pettycontractors',
            name='pan_number',
            field=models.CharField(default=0, max_length=50, unique=True, verbose_name='PAN Number'),
            preserve_default=False,
        ),
        migrations.AlterField(
            model_name='pettycontractors',
            name='state',
            field=models.CharField(max_length=50, null=True, verbose_name='State'),
        ),
        migrations.AlterField(
            model_name='pettycontractors',
            name='street_name',
            field=models.CharField(max_length=50, null=True, verbose_name='Street Name'),
        ),
        migrations.AlterField(
            model_name='pettycontractors',
            name='tin_number',
            field=models.CharField(default=0, max_length=10, unique=True, verbose_name='TIN Number'),
            preserve_default=False,
        ),
        migrations.AlterField(
            model_name='projectmodel',
            name='created_on',
            field=models.DateTimeField(auto_now=True, verbose_name='Created On'),
        ),
        migrations.AlterField(
            model_name='projectmodel',
            name='financial_year',
            field=models.CharField(blank=True, max_length=5, verbose_name='Financial Year'),
        ),
        migrations.AlterField(
            model_name='projectmodel',
            name='project_name',
            field=models.CharField(blank=True, max_length=250, unique=True, verbose_name='Project Name'),
        ),
        migrations.AlterField(
            model_name='projectmodel',
            name='scheme_name',
            field=models.CharField(blank=True, max_length=250, verbose_name='Scheme Name'),
        ),
        migrations.AlterField(
            model_name='projectmodel',
            name='updated_on',
            field=models.DateTimeField(blank=True, null=True, verbose_name='Update On'),
        ),
        migrations.AlterField(
            model_name='revisedadministrativesanctionmodel',
            name='created_on',
            field=models.DateTimeField(auto_now=True, verbose_name='Created On'),
        ),
        migrations.AlterField(
            model_name='revisedadministrativesanctionmodel',
            name='project',
            field=models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, to='Forms.ProjectModel', verbose_name='Project'),
        ),
        migrations.AlterField(
            model_name='revisedadministrativesanctionmodel',
            name='updated_on',
            field=models.DateField(blank=True, default=None, null=True, verbose_name='Updated On'),
        ),
        migrations.AlterField(
            model_name='revisedtechnicalapprovalmodel',
            name='authority',
            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='Forms.TechnicalAuthority', verbose_name='Technical Authority'),
        ),
        migrations.AlterField(
            model_name='revisedtechnicalapprovalmodel',
            name='created_on',
            field=models.DateTimeField(auto_now=True, verbose_name='Created On'),
        ),
        migrations.AlterField(
            model_name='revisedtechnicalapprovalmodel',
            name='updated_on',
            field=models.DateField(blank=True, default=None, null=True, verbose_name='Updated On'),
        ),
        migrations.AlterField(
            model_name='revisedtechnicalapprovalmodel',
            name='work_name',
            field=models.CharField(blank=True, max_length=300, verbose_name='Work'),
        ),
        migrations.AlterField(
            model_name='revisedtechnicalsanctionmodel',
            name='project',
            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='Forms.ProjectModel', verbose_name='Project'),
        ),
        migrations.AlterField(
            model_name='schememodel',
            name='created_on',
            field=models.DateTimeField(auto_now=True, verbose_name='Created On'),
        ),
        migrations.AlterField(
            model_name='schememodel',
            name='dept_name',
            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='Forms.UserDepartment', verbose_name='Department Name'),
        ),
        migrations.AlterField(
            model_name='schememodel',
            name='financial_year',
            field=models.CharField(blank=True, max_length=5, verbose_name='Financial Year'),
        ),
        migrations.AlterField(
            model_name='schememodel',
            name='scheme_name',
            field=models.CharField(max_length=250, unique=True, verbose_name='Scheme Name'),
        ),
        migrations.AlterField(
            model_name='schememodel',
            name='total_admin_sanction_amount',
            field=models.FloatField(verbose_name='Total Admin Sanction Amount'),
        ),
        migrations.AlterField(
            model_name='schememodel',
            name='updated_on',
            field=models.DateTimeField(blank=True, null=True, verbose_name='Updated On'),
        ),
        migrations.AlterField(
            model_name='technicalapprovalmodel',
            name='created_on',
            field=models.DateTimeField(auto_now=True, verbose_name='Created On'),
        ),
        migrations.AlterField(
            model_name='technicalapprovalmodel',
            name='financial_year',
            field=models.CharField(blank=True, max_length=5, verbose_name='Financial Year'),
        ),
        migrations.AlterField(
            model_name='technicalapprovalmodel',
            name='project_name',
            field=models.CharField(blank=True, max_length=250, verbose_name='Project Name'),
        ),
        migrations.AlterField(
            model_name='technicalapprovalmodel',
            name='updated_on',
            field=models.DateField(blank=True, null=True, verbose_name='Updated On'),
        ),
        migrations.AlterField(
            model_name='technicalapprovalmodel',
            name='work_name',
            field=models.CharField(blank=True, max_length=300, verbose_name='Work Name'),
        ),
        migrations.AlterField(
            model_name='technicalauthority',
            name='tender_authority',
            field=models.ForeignKey(default=0, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Technical Authority'),
            preserve_default=False,
        ),
        migrations.AlterField(
            model_name='technicalsanctionmodel',
            name='created_on',
            field=models.DateTimeField(auto_now=True, verbose_name='Created On'),
        ),
        migrations.AlterField(
            model_name='technicalsanctionmodel',
            name='financial_year',
            field=models.CharField(blank=True, max_length=5, verbose_name='Financial Year'),
        ),
        migrations.AlterField(
            model_name='technicalsanctionmodel',
            name='project_name',
            field=models.CharField(blank=True, max_length=300, verbose_name='Project Name'),
        ),
        migrations.AlterField(
            model_name='technicalsanctionmodel',
            name='technical_authority',
            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='Forms.TechnicalAuthority', verbose_name='Technical Authority'),
        ),
        migrations.AlterField(
            model_name='technicalsanctionmodel',
            name='updated_on',
            field=models.DateTimeField(blank=True, null=True, verbose_name='Update On'),
        ),
        migrations.AlterField(
            model_name='technicalwing',
            name='technical_wing_name',
            field=models.CharField(max_length=10, null=True, unique=True, verbose_name='Technical Wing'),
        ),
        migrations.AlterField(
            model_name='tender',
            name='created_on',
            field=models.DateTimeField(auto_now=True, verbose_name='Created On'),
        ),
        migrations.AlterField(
            model_name='tender',
            name='updated_on',
            field=models.DateTimeField(blank=True, null=True, verbose_name='Updated On'),
        ),
        migrations.AlterField(
            model_name='userdepartment',
            name='department_name',
            field=models.CharField(max_length=50, null=True, unique=True, verbose_name='Department Name'),
        ),
        migrations.AlterField(
            model_name='userdepartment',
            name='department_reference',
            field=models.CharField(max_length=7, null=True, unique=True, verbose_name='Department Name'),
        ),
        migrations.AlterField(
            model_name='workmodel',
            name='created_on',
            field=models.DateTimeField(auto_now=True, verbose_name='Created On'),
        ),
        migrations.AlterField(
            model_name='workmodel',
            name='financial_year',
            field=models.CharField(blank=True, max_length=5, verbose_name='Financial Year'),
        ),
        migrations.AlterField(
            model_name='workmodel',
            name='project_name',
            field=models.CharField(blank=True, max_length=250, verbose_name='Project Name'),
        ),
        migrations.AlterField(
            model_name='workmodel',
            name='updated_on',
            field=models.DateTimeField(blank=True, null=True, verbose_name='Updated On'),
        ),
        migrations.AlterField(
            model_name='workmodel',
            name='work_name',
            field=models.CharField(blank=True, max_length=300, unique=True, verbose_name='Work Name'),
        ),
        migrations.AlterField(
            model_name='workordermodel',
            name='created_on',
            field=models.DateTimeField(auto_now=True, verbose_name='Created On'),
        ),
        migrations.AlterField(
            model_name='workordermodel',
            name='tender_authority',
            field=models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, to='Forms.TechnicalAuthority', verbose_name='Technical Authority'),
        ),
        migrations.AlterField(
            model_name='workordermodel',
            name='updated_on',
            field=models.DateTimeField(blank=True, null=True, verbose_name='Updated On'),
        ),
        migrations.AlterField(
            model_name='workordermodel',
            name='work_name',
            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='Forms.WorkModel', verbose_name='Work'),
        ),
    ]
    

'


Answer: You seem to be missing a dependency for the migration that adds the user
model. I'm not sure why it's missing, but try adding it manually and running
your migrations again:

    
    
    dependencies = [
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
        ('Forms', '0009_revised_tender_changes'),
    ]
    

