Fixed #22210 -- Saving model instances to non-related fields.

Previously, saving a model instance to a non-related field (in
particular a FloatField) would silently convert the model to an Integer
(the pk) and save it. This is undesirable behaviour, and likely to cause
confusion so the validatio has been hardened.

Thanks to @PirosB3 for the patch and @jarshwah for the review.
This commit is contained in:
Daniel Pyrathon 2014-03-10 15:17:57 +00:00 committed by Marc Tamlyn
parent 3bd45ba00d
commit 819e09b848
4 changed files with 27 additions and 2 deletions

View file

@ -23,7 +23,7 @@ from django.utils.functional import lazy
from .models import (
Foo, Bar, Whiz, BigD, BigS, BigInt, Post, NullBooleanModel,
BooleanModel, PrimaryKeyCharModel, DataModel, Document, RenamedField,
VerboseNameField, FksToBooleans, FkToChar)
VerboseNameField, FksToBooleans, FkToChar, FloatModel)
class BasicFieldTests(test.TestCase):
@ -78,6 +78,16 @@ class BasicFieldTests(test.TestCase):
self.assertEqual(m._meta.get_field('id').verbose_name, 'verbose pk')
def test_float_validates_object(self):
instance = FloatModel(size=2.5)
instance.save()
self.assertTrue(instance.id)
obj = FloatModel.objects.get(pk=1)
obj.size = obj
with self.assertRaises(TypeError):
obj.save()
def test_choices_form_class(self):
"""Can supply a custom choices form class. Regression for #20999."""
choices = [('a', 'a')]