Search code examples
pythondjangodjango-modelsdjango-migrationsdjango-testing

Django model foreign key field is not available in migrations during tests


I have this model.

class TransportOrder(SomeMixin, models.Model):
    order = models.ForeignKey(
        to="orders.Order",
        on_delete=models.PROTECT,
        related_name="transport_orders",
        help_text=_("Order which was used for creating"),
        null=True,
        blank=True,
    )
    # Other fields have been removed for simplicity

I have forward function in a migration.

def forward(apps, schema_editor):
    TransportOrder = apps.get_model("transportorders", "TransportOrder")
    
    # There is no `order` field printed result.
    print(dir(TransportOrder))

    # I need to filter something by using `TransportOrder.order` foreign key field here. But I receive the error obviously.

Since there is no order field in TransportOrder model provided by apps.get_model function, I got the following error.

django.core.exceptions.FieldError: Cannot resolve keyword 'order' into field.

However, this only happens while running my tests. Otherwise there is no problem. What can cause this issue?


Solution

  • Apparently somehow, dependencies=[] created by makemigration was not correct in some of the old migrations.

    Manually adding some dependencies in some migrations fixed the problem.