File tree Expand file tree Collapse file tree 4 files changed +27
-1
lines changed Expand file tree Collapse file tree 4 files changed +27
-1
lines changed Original file line number Diff line number Diff line change @@ -58,6 +58,10 @@ Fixes:
58
58
- Attempting to use a reserved name for a translated field now raises an
59
59
:exc: `~django.core.exceptions.ImproperlyConfigured ` exception instead of silently
60
60
ignoring the field.
61
+ - Instances created by serializers using
62
+ :class: `~hvad.contrib.restframework.serializers.TranslatableModelMixin `
63
+ in normal, non-*enforcing * mode can no longer be created without a translation.
64
+ — :issue: `322 `.
61
65
62
66
*****************************
63
67
1.7.0 - current release
Original file line number Diff line number Diff line change @@ -238,6 +238,14 @@ def validate(self, data):
238
238
data ['language_code' ] = self .language
239
239
return data
240
240
241
+ def create (self , validated_data ):
242
+ # Having a language_code key forces creation of a translation in default
243
+ # language, even if no translated field is provided.
244
+ # This ensures the serializer will not create untranslated instances.
245
+ if 'language_code' not in validated_data :
246
+ validated_data ['language_code' ] = None
247
+ return super (TranslatableModelMixin , self ).create (validated_data )
248
+
241
249
def update (self , instance , data ):
242
250
'Handle switching to correct translation before actual update'
243
251
enforce = 'language_code' in data
Original file line number Diff line number Diff line change 12
12
class Normal (TranslatableModel ):
13
13
shared_field = models .CharField (max_length = 255 )
14
14
translations = TranslatedFields (
15
- translated_field = models .CharField (max_length = 255 )
15
+ translated_field = models .CharField (max_length = 255 , blank = True )
16
16
)
17
17
18
18
def __str__ (self ):
Original file line number Diff line number Diff line change @@ -154,6 +154,20 @@ def test_create_normal(self):
154
154
self .assertIsNotNone (obj .pk )
155
155
self .assertSavedObject (obj , 'en' , ** data )
156
156
157
+ def test_create_normal_no_language (self ):
158
+ 'Deserialize a new instance, without including any translated field'
159
+ data = {
160
+ 'shared_field' : 'shared' ,
161
+ }
162
+ serializer = AutoSerializer (data = data )
163
+ self .assertTrue (serializer .is_valid ())
164
+
165
+ with translation .override ('en' ):
166
+ obj = serializer .save ()
167
+ self .assertIsNotNone (obj .pk )
168
+ self .assertSavedObject (obj , 'en' , ** data )
169
+ self .assertEqual (obj .language_code , 'en' )
170
+
157
171
def test_create_enforce (self ):
158
172
'Deserialize a new instance, with language-enforcing mode'
159
173
data = {
You can’t perform that action at this time.
0 commit comments