diff --git a/django_mongodb_backend/fields/embedded_model_array.py b/django_mongodb_backend/fields/embedded_model_array.py index 1eff06a6..8b14a498 100644 --- a/django_mongodb_backend/fields/embedded_model_array.py +++ b/django_mongodb_backend/fields/embedded_model_array.py @@ -1,4 +1,5 @@ from django.db.models import Field +from django.db.models.fields.related import lazy_related_operation from .. import forms from . import EmbeddedModelField @@ -12,6 +13,17 @@ def __init__(self, embedded_model, **kwargs): super().__init__(EmbeddedModelField(embedded_model), **kwargs) self.embedded_model = embedded_model + def contribute_to_class(self, cls, name, private_only=False, **kwargs): + super().contribute_to_class(cls, name, private_only=private_only, **kwargs) + + if not cls._meta.abstract: + # If the embedded_model argument is a string, resolve it to the + # actual model class. + def _resolve_lookup(_, resolved_model): + self.embedded_model = resolved_model + + lazy_related_operation(_resolve_lookup, cls, self.embedded_model) + def deconstruct(self): name, path, args, kwargs = super().deconstruct() if path == "django_mongodb_backend.fields.embedded_model_array.EmbeddedModelArrayField": diff --git a/tests/model_fields_/models.py b/tests/model_fields_/models.py index 3cf074a2..3b4fd4e1 100644 --- a/tests/model_fields_/models.py +++ b/tests/model_fields_/models.py @@ -151,17 +151,17 @@ def __str__(self): # EmbeddedModelArrayField -class Review(EmbeddedModel): +class Movie(models.Model): title = models.CharField(max_length=255) - rating = models.DecimalField(max_digits=6, decimal_places=1) + reviews = EmbeddedModelArrayField("Review", null=True) def __str__(self): return self.title -class Movie(models.Model): +class Review(EmbeddedModel): title = models.CharField(max_length=255) - reviews = EmbeddedModelArrayField(Review, null=True) + rating = models.DecimalField(max_digits=6, decimal_places=1) def __str__(self): return self.title