Skip to content

Commit 2617e5b

Browse files
committed
Fix crash when EmbeddedModelArrayField's embedded_model arg is a string
1 parent fe24e7a commit 2617e5b

File tree

2 files changed

+16
-4
lines changed

2 files changed

+16
-4
lines changed

django_mongodb_backend/fields/embedded_model_array.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from django.db.models import Field
2+
from django.db.models.fields.related import lazy_related_operation
23

34
from .. import forms
45
from . import EmbeddedModelField
@@ -12,6 +13,17 @@ def __init__(self, embedded_model, **kwargs):
1213
super().__init__(EmbeddedModelField(embedded_model), **kwargs)
1314
self.embedded_model = embedded_model
1415

16+
def contribute_to_class(self, cls, name, private_only=False, **kwargs):
17+
super().contribute_to_class(cls, name, private_only=private_only, **kwargs)
18+
19+
if not cls._meta.abstract:
20+
# If the embedded_model argument is a string, resolve it to the
21+
# actual model class.
22+
def _resolve_lookup(_, resolved_model):
23+
self.embedded_model = resolved_model
24+
25+
lazy_related_operation(_resolve_lookup, cls, self.embedded_model)
26+
1527
def deconstruct(self):
1628
name, path, args, kwargs = super().deconstruct()
1729
if path == "django_mongodb_backend.fields.embedded_model_array.EmbeddedModelArrayField":

tests/model_fields_/models.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -151,17 +151,17 @@ def __str__(self):
151151

152152

153153
# EmbeddedModelArrayField
154-
class Review(EmbeddedModel):
154+
class Movie(models.Model):
155155
title = models.CharField(max_length=255)
156-
rating = models.DecimalField(max_digits=6, decimal_places=1)
156+
reviews = EmbeddedModelArrayField("Review", null=True)
157157

158158
def __str__(self):
159159
return self.title
160160

161161

162-
class Movie(models.Model):
162+
class Review(EmbeddedModel):
163163
title = models.CharField(max_length=255)
164-
reviews = EmbeddedModelArrayField(Review, null=True)
164+
rating = models.DecimalField(max_digits=6, decimal_places=1)
165165

166166
def __str__(self):
167167
return self.title

0 commit comments

Comments
 (0)