5
5
These tests deal with ensuring that we correctly map the model fields onto
6
6
an appropriate set of serializer fields for each case.
7
7
"""
8
+ from __future__ import unicode_literals
8
9
from django .core .exceptions import ImproperlyConfigured
9
10
from django .core .validators import MaxValueValidator , MinValueValidator , MinLengthValidator
10
11
from django .db import models
11
12
from django .test import TestCase
13
+ from django .utils import six
12
14
from rest_framework import serializers
15
+ from rest_framework .compat import unicode_repr
13
16
14
17
15
18
def dedent (blocktext ):
@@ -124,7 +127,7 @@ class Meta:
124
127
url_field = URLField(max_length=100)
125
128
custom_field = ModelField(model_field=<tests.test_model_serializer.CustomField: custom_field>)
126
129
""" )
127
- self .assertEqual (repr (TestSerializer ()), expected )
130
+ self .assertEqual (unicode_repr (TestSerializer ()), expected )
128
131
129
132
def test_field_options (self ):
130
133
class TestSerializer (serializers .ModelSerializer ):
@@ -142,7 +145,14 @@ class Meta:
142
145
descriptive_field = IntegerField(help_text='Some help text', label='A label')
143
146
choices_field = ChoiceField(choices=[('red', 'Red'), ('blue', 'Blue'), ('green', 'Green')])
144
147
""" )
145
- self .assertEqual (repr (TestSerializer ()), expected )
148
+ if six .PY2 :
149
+ # This particular case is too awkward to resolve fully across
150
+ # both py2 and py3.
151
+ expected = expected .replace (
152
+ "('red', 'Red'), ('blue', 'Blue'), ('green', 'Green')" ,
153
+ "(u'red', u'Red'), (u'blue', u'Blue'), (u'green', u'Green')"
154
+ )
155
+ self .assertEqual (unicode_repr (TestSerializer ()), expected )
146
156
147
157
def test_method_field (self ):
148
158
"""
@@ -221,14 +231,34 @@ class Meta:
221
231
model = RegularFieldsModel
222
232
fields = ('auto_field' ,)
223
233
224
- with self .assertRaises (ImproperlyConfigured ) as excinfo :
234
+ with self .assertRaises (AssertionError ) as excinfo :
225
235
TestSerializer ().fields
226
236
expected = (
227
237
'Field `missing` has been declared on serializer '
228
238
'`TestSerializer`, but is missing from `Meta.fields`.'
229
239
)
230
240
assert str (excinfo .exception ) == expected
231
241
242
+ def test_missing_superclass_field (self ):
243
+ """
244
+ Fields that have been declared on a parent of the serializer class may
245
+ be excluded from the `Meta.fields` option.
246
+ """
247
+ class TestSerializer (serializers .ModelSerializer ):
248
+ missing = serializers .ReadOnlyField ()
249
+
250
+ class Meta :
251
+ model = RegularFieldsModel
252
+
253
+ class ChildSerializer (TestSerializer ):
254
+ missing = serializers .ReadOnlyField ()
255
+
256
+ class Meta :
257
+ model = RegularFieldsModel
258
+ fields = ('auto_field' ,)
259
+
260
+ ChildSerializer ().fields
261
+
232
262
233
263
# Tests for relational field mappings.
234
264
# ------------------------------------
@@ -276,7 +306,7 @@ class Meta:
276
306
many_to_many = PrimaryKeyRelatedField(many=True, queryset=ManyToManyTargetModel.objects.all())
277
307
through = PrimaryKeyRelatedField(many=True, read_only=True)
278
308
""" )
279
- self .assertEqual (repr (TestSerializer ()), expected )
309
+ self .assertEqual (unicode_repr (TestSerializer ()), expected )
280
310
281
311
def test_nested_relations (self ):
282
312
class TestSerializer (serializers .ModelSerializer ):
@@ -300,7 +330,7 @@ class Meta:
300
330
id = IntegerField(label='ID', read_only=True)
301
331
name = CharField(max_length=100)
302
332
""" )
303
- self .assertEqual (repr (TestSerializer ()), expected )
333
+ self .assertEqual (unicode_repr (TestSerializer ()), expected )
304
334
305
335
def test_hyperlinked_relations (self ):
306
336
class TestSerializer (serializers .HyperlinkedModelSerializer ):
@@ -315,7 +345,7 @@ class Meta:
315
345
many_to_many = HyperlinkedRelatedField(many=True, queryset=ManyToManyTargetModel.objects.all(), view_name='manytomanytargetmodel-detail')
316
346
through = HyperlinkedRelatedField(many=True, read_only=True, view_name='throughtargetmodel-detail')
317
347
""" )
318
- self .assertEqual (repr (TestSerializer ()), expected )
348
+ self .assertEqual (unicode_repr (TestSerializer ()), expected )
319
349
320
350
def test_nested_hyperlinked_relations (self ):
321
351
class TestSerializer (serializers .HyperlinkedModelSerializer ):
@@ -339,7 +369,7 @@ class Meta:
339
369
url = HyperlinkedIdentityField(view_name='throughtargetmodel-detail')
340
370
name = CharField(max_length=100)
341
371
""" )
342
- self .assertEqual (repr (TestSerializer ()), expected )
372
+ self .assertEqual (unicode_repr (TestSerializer ()), expected )
343
373
344
374
def test_pk_reverse_foreign_key (self ):
345
375
class TestSerializer (serializers .ModelSerializer ):
@@ -353,7 +383,7 @@ class Meta:
353
383
name = CharField(max_length=100)
354
384
reverse_foreign_key = PrimaryKeyRelatedField(many=True, queryset=RelationalModel.objects.all())
355
385
""" )
356
- self .assertEqual (repr (TestSerializer ()), expected )
386
+ self .assertEqual (unicode_repr (TestSerializer ()), expected )
357
387
358
388
def test_pk_reverse_one_to_one (self ):
359
389
class TestSerializer (serializers .ModelSerializer ):
@@ -367,7 +397,7 @@ class Meta:
367
397
name = CharField(max_length=100)
368
398
reverse_one_to_one = PrimaryKeyRelatedField(queryset=RelationalModel.objects.all())
369
399
""" )
370
- self .assertEqual (repr (TestSerializer ()), expected )
400
+ self .assertEqual (unicode_repr (TestSerializer ()), expected )
371
401
372
402
def test_pk_reverse_many_to_many (self ):
373
403
class TestSerializer (serializers .ModelSerializer ):
@@ -381,7 +411,7 @@ class Meta:
381
411
name = CharField(max_length=100)
382
412
reverse_many_to_many = PrimaryKeyRelatedField(many=True, queryset=RelationalModel.objects.all())
383
413
""" )
384
- self .assertEqual (repr (TestSerializer ()), expected )
414
+ self .assertEqual (unicode_repr (TestSerializer ()), expected )
385
415
386
416
def test_pk_reverse_through (self ):
387
417
class TestSerializer (serializers .ModelSerializer ):
@@ -395,7 +425,7 @@ class Meta:
395
425
name = CharField(max_length=100)
396
426
reverse_through = PrimaryKeyRelatedField(many=True, read_only=True)
397
427
""" )
398
- self .assertEqual (repr (TestSerializer ()), expected )
428
+ self .assertEqual (unicode_repr (TestSerializer ()), expected )
399
429
400
430
401
431
class TestIntegration (TestCase ):
0 commit comments