diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index e353beb5f..fb4b8d393 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -941,15 +941,17 @@ class ModelSerializer(Serializer): except TypeError: tb = traceback.format_exc() 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 ' '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 ' 'this correctly.\nOriginal exception was:\n %s' % ( ModelClass.__name__, + ModelClass._default_manager.name, ModelClass.__name__, + ModelClass._default_manager.name, self.__class__.__name__, tb ) diff --git a/tests/test_model_serializer.py b/tests/test_model_serializer.py index b1532e164..7e801badb 100644 --- a/tests/test_model_serializer.py +++ b/tests/test_model_serializer.py @@ -102,13 +102,6 @@ class Issue3674ChildModel(models.Model): 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): CHOICES = ( ('choice1', 'choice 1'), @@ -133,7 +126,7 @@ class TestModelSerializer(TestCase): }) 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): serializer.save() @@ -1233,13 +1226,26 @@ class TestFieldSource(TestCase): self.assertEqual(unicode_repr(TestSerializer()), expected) +class Issue6110TestModel(models.Model): + """Model without .objects manager.""" + + name = models.CharField(max_length=64) + all_objects = models.Manager() + + +class Issue6110ModelSerializer(serializers.ModelSerializer): + class Meta: + model = Issue6110TestModel + fields = ('name',) + + class Issue6110Test(TestCase): + def test_model_serializer_custom_manager(self): - - class TestModelSerializer(serializers.ModelSerializer): - class Meta: - model = Issue6110TestModel - fields = ('name',) - - instance = TestModelSerializer().create({'name': 'test_name'}) + instance = Issue6110ModelSerializer().create({'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'})