mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-02-03 13:14:30 +03:00
Improve ModelSerializer.create() error message. (#6112)
This commit is contained in:
parent
8b5e830bce
commit
2fab7838ef
|
@ -941,15 +941,17 @@ class ModelSerializer(Serializer):
|
||||||
except TypeError:
|
except TypeError:
|
||||||
tb = traceback.format_exc()
|
tb = traceback.format_exc()
|
||||||
msg = (
|
msg = (
|
||||||
'Got a `TypeError` when calling `%s._default_manager.create()`. '
|
'Got a `TypeError` when calling `%s.%s.create()`. '
|
||||||
'This may be because you have a writable field on the '
|
'This may be because you have a writable field on the '
|
||||||
'serializer class that is not a valid argument to '
|
'serializer class that is not a valid argument to '
|
||||||
'`%s._default_manager.create()`. You may need to make the field '
|
'`%s.%s.create()`. You may need to make the field '
|
||||||
'read-only, or override the %s.create() method to handle '
|
'read-only, or override the %s.create() method to handle '
|
||||||
'this correctly.\nOriginal exception was:\n %s' %
|
'this correctly.\nOriginal exception was:\n %s' %
|
||||||
(
|
(
|
||||||
ModelClass.__name__,
|
ModelClass.__name__,
|
||||||
|
ModelClass._default_manager.name,
|
||||||
ModelClass.__name__,
|
ModelClass.__name__,
|
||||||
|
ModelClass._default_manager.name,
|
||||||
self.__class__.__name__,
|
self.__class__.__name__,
|
||||||
tb
|
tb
|
||||||
)
|
)
|
||||||
|
|
|
@ -102,13 +102,6 @@ class Issue3674ChildModel(models.Model):
|
||||||
value = models.CharField(primary_key=True, max_length=64)
|
value = models.CharField(primary_key=True, max_length=64)
|
||||||
|
|
||||||
|
|
||||||
class Issue6110TestModel(models.Model):
|
|
||||||
"""Model without .objects manager."""
|
|
||||||
|
|
||||||
name = models.CharField(max_length=64)
|
|
||||||
all_objects = models.Manager()
|
|
||||||
|
|
||||||
|
|
||||||
class UniqueChoiceModel(models.Model):
|
class UniqueChoiceModel(models.Model):
|
||||||
CHOICES = (
|
CHOICES = (
|
||||||
('choice1', 'choice 1'),
|
('choice1', 'choice 1'),
|
||||||
|
@ -133,7 +126,7 @@ class TestModelSerializer(TestCase):
|
||||||
})
|
})
|
||||||
serializer.is_valid()
|
serializer.is_valid()
|
||||||
|
|
||||||
msginitial = 'Got a `TypeError` when calling `OneFieldModel._default_manager.create()`.'
|
msginitial = 'Got a `TypeError` when calling `OneFieldModel.objects.create()`.'
|
||||||
with self.assertRaisesMessage(TypeError, msginitial):
|
with self.assertRaisesMessage(TypeError, msginitial):
|
||||||
serializer.save()
|
serializer.save()
|
||||||
|
|
||||||
|
@ -1233,13 +1226,26 @@ class TestFieldSource(TestCase):
|
||||||
self.assertEqual(unicode_repr(TestSerializer()), expected)
|
self.assertEqual(unicode_repr(TestSerializer()), expected)
|
||||||
|
|
||||||
|
|
||||||
class Issue6110Test(TestCase):
|
class Issue6110TestModel(models.Model):
|
||||||
def test_model_serializer_custom_manager(self):
|
"""Model without .objects manager."""
|
||||||
|
|
||||||
class TestModelSerializer(serializers.ModelSerializer):
|
name = models.CharField(max_length=64)
|
||||||
|
all_objects = models.Manager()
|
||||||
|
|
||||||
|
|
||||||
|
class Issue6110ModelSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Issue6110TestModel
|
model = Issue6110TestModel
|
||||||
fields = ('name',)
|
fields = ('name',)
|
||||||
|
|
||||||
instance = TestModelSerializer().create({'name': 'test_name'})
|
|
||||||
|
class Issue6110Test(TestCase):
|
||||||
|
|
||||||
|
def test_model_serializer_custom_manager(self):
|
||||||
|
instance = Issue6110ModelSerializer().create({'name': 'test_name'})
|
||||||
self.assertEqual(instance.name, 'test_name')
|
self.assertEqual(instance.name, 'test_name')
|
||||||
|
|
||||||
|
def test_model_serializer_custom_manager_error_message(self):
|
||||||
|
msginitial = ('Got a `TypeError` when calling `Issue6110TestModel.all_objects.create()`.')
|
||||||
|
with self.assertRaisesMessage(TypeError, msginitial):
|
||||||
|
Issue6110ModelSerializer().create({'wrong_param': 'wrong_param'})
|
||||||
|
|
Loading…
Reference in New Issue
Block a user