@@ -15,6 +15,9 @@ def __init__(self, embedded_model, *args, **kwargs):
15
15
stored. Like other relational fields, it may also be passed as a
16
16
string.
17
17
"""
18
+ if not isinstance (embedded_model , str ):
19
+ self ._validate_embedded_field (self , embedded_model )
20
+
18
21
self .embedded_model = embedded_model
19
22
super ().__init__ (* args , ** kwargs )
20
23
@@ -28,6 +31,14 @@ def deconstruct(self):
28
31
def get_internal_type (self ):
29
32
return "EmbeddedModelField"
30
33
34
+ @staticmethod
35
+ def _validate_embedded_field (_ , model ):
36
+ for field in model ._meta .local_fields :
37
+ if isinstance (field , models .ForeignKey | models .OneToOneField ):
38
+ raise TypeError (
39
+ f"Field of type { type (field )!r} is not supported within an EmbeddedModelField."
40
+ )
41
+
31
42
def _set_model (self , model ):
32
43
"""
33
44
Resolve embedded model class once the field knows the model it belongs
@@ -48,6 +59,7 @@ def _resolve_lookup(_, resolved_model):
48
59
self .embedded_model = resolved_model
49
60
50
61
lazy_related_operation (_resolve_lookup , model , self .embedded_model )
62
+ lazy_related_operation (self ._validate_embedded_field , model , self .embedded_model )
51
63
52
64
model = property (lambda self : self ._model , _set_model )
53
65
@@ -139,7 +151,7 @@ def formfield(self, **kwargs):
139
151
140
152
141
153
class KeyTransform (Transform ):
142
- def __init__ (self , key_name , ref_field = None , * args , ** kwargs ):
154
+ def __init__ (self , key_name , ref_field , * args , ** kwargs ):
143
155
super ().__init__ (* args , ** kwargs )
144
156
self .key_name = str (key_name )
145
157
self .ref_field = ref_field
@@ -195,7 +207,7 @@ def key_transform(self, compiler, connection):
195
207
196
208
197
209
class KeyTransformFactory :
198
- def __init__ (self , key_name , ref_field = None ):
210
+ def __init__ (self , key_name , ref_field ):
199
211
self .key_name = key_name
200
212
self .ref_field = ref_field
201
213
0 commit comments