rvinzent / django-dynamic-models

Dynamic Django models allow users to define, edit, and populate their own database schema.
MIT License
154 stars 46 forks source link

Related managers not created properly if related model generated after parent model #58

Open rvinzent opened 2 years ago

rvinzent commented 2 years ago

Steps to Reproduce

model_schema = ModelSchema.objects.create(name="SimpleModel")
related_model_schema = ModelSchema.objects.create(name="RelatedModel")

FieldSchema.objects.create(
    name="related",
    model_schema=model_schema,
    class_name="django.db.models.ForeignKey",
        kwargs={
            "to": another_model_schema.model_name,
            "on_delete": models.CASCADE,
            "related_name": "parent_objects",
        },
)
model = model_schema.as_model()
related_model = related_model_schema.as_model()

related_instance = related_model.objects.create()
model_instance = model.objects.create(related=related_instance)
related_instance.parent_objects

AttributeError: "parent_objects" does not exist

Workaround

Call related_model_schema.as_model() before `model_schema.as_model(). This works for some reason