Stephan B
Stephan B

Reputation: 33

Django CyclicDependencyError in model

I'm trying to perform a makemigrations, but it errors out like this:

django.utils.topological_sort.CyclicDependencyError: Cyclic dependency in graph: (<CreateModel name='CasprAdminStatusDef', fields=[('assessment_type', <django.db.models.fields.related.OneToOneField>), ('status_name', <django.db.models.fields.CharField>)], options={'db_table': 'CAsPr_Admin_Status_Def', 'managed': False}, bases=(<class 'django.db.models.base.Model'>,), managers=[]>, {<CreateModel name='CasprAdminStatusDef', fields=[('assessment_type', <django.db.models.fields.related.OneToOneField>), ('status_name', <django.db.models.fields.CharField>)], options={'db_table': 'CAsPr_Admin_Status_Def', 'managed': False}, bases=(<class 'django.db.models.base.Model'>,), managers=[]>})

The model that is erroring out is very simple. I don't see the problem:

class CasprAdminStatusDef(models.Model):
    assessment_type = models.OneToOneField('self', models.DO_NOTHING, db_column='Assessment_Type', primary_key=True, related_name='+')  # Field name made lowercase.
    statusid = models.ForeignKey('self', models.DO_NOTHING, db_column='StatusID')  # Field name made lowercase.
    status_name = models.CharField(db_column='Status_Name', max_length=50, blank=True, null=True)  # Field name made lowercase.

    class Meta:
        managed = False
        db_table = 'CAsPr_Admin_Status_Def'
        unique_together = (('assessment_type', 'statusid'),)

This model was created by inspectdb. What's going on here?

Upvotes: 0

Views: 55

Answers (1)

Stephan B
Stephan B

Reputation: 33

It appears that I had some weird self-referencing CONSTRAINT in the table definition. That created this weird model.

I removed the CONSTRAINT, updated the model and the problem went away:

class CasprAdminStatusDef(models.Model):
    assessment_type = models.CharField(db_column='Assessment_Type', max_length=5, primary_key=True)
    statusid = models.IntegerField(db_column='StatusID')
    status_name = models.CharField(db_column='Status_Name', max_length=50, blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'CAsPr_Admin_Status_Def'
        unique_together = (('assessment_type', 'statusid'),)

Upvotes: 1

Related Questions