mirror of
https://github.com/django/django.git
synced 2025-10-24 14:16:09 +00:00
Fixed #25160 -- Moved unsaved model instance data loss check to Model.save()
This mostly reverts5643a3b51band81e1a35c36. Thanks Carl Meyer for review.
This commit is contained in:
@@ -163,31 +163,6 @@ class ManyToOneTests(TestCase):
|
||||
self.assertFalse(hasattr(self.r2.article_set, 'remove'))
|
||||
self.assertFalse(hasattr(self.r2.article_set, 'clear'))
|
||||
|
||||
def test_assign_unsaved_check_override(self):
|
||||
"""
|
||||
#24495 - Assigning an unsaved object to a ForeignKey
|
||||
should be allowed when the allow_unsaved_instance_assignment
|
||||
attribute has been set to True.
|
||||
"""
|
||||
class UnsavedForeignKey(models.ForeignKey):
|
||||
# A ForeignKey which can point to an unsaved object
|
||||
allow_unsaved_instance_assignment = True
|
||||
|
||||
class Band(models.Model):
|
||||
name = models.CharField(max_length=50)
|
||||
|
||||
class BandMember(models.Model):
|
||||
band = UnsavedForeignKey(Band, models.CASCADE)
|
||||
first_name = models.CharField(max_length=50)
|
||||
last_name = models.CharField(max_length=50)
|
||||
|
||||
beatles = Band(name='The Beatles')
|
||||
john = BandMember(first_name='John', last_name='Lennon')
|
||||
# This should not raise an exception as the ForeignKey between member
|
||||
# and band has allow_unsaved_instance_assignment=True.
|
||||
john.band = beatles
|
||||
self.assertEqual(john.band, beatles)
|
||||
|
||||
def test_selects(self):
|
||||
self.r.article_set.create(headline="John's second story",
|
||||
pub_date=datetime.date(2005, 7, 29))
|
||||
@@ -567,15 +542,13 @@ class ManyToOneTests(TestCase):
|
||||
|
||||
# Creation using keyword argument and unsaved related instance (#8070).
|
||||
p = Parent()
|
||||
with self.assertRaisesMessage(ValueError,
|
||||
'Cannot assign "%r": "%s" instance isn\'t saved in the database.'
|
||||
% (p, Child.parent.field.remote_field.model._meta.object_name)):
|
||||
Child(parent=p)
|
||||
msg = "save() prohibited to prevent data loss due to unsaved related object 'parent'."
|
||||
with self.assertRaisesMessage(ValueError, msg):
|
||||
Child.objects.create(parent=p)
|
||||
|
||||
with self.assertRaisesMessage(ValueError,
|
||||
'Cannot assign "%r": "%s" instance isn\'t saved in the database.'
|
||||
% (p, Child.parent.field.remote_field.model._meta.object_name)):
|
||||
ToFieldChild(parent=p)
|
||||
msg = "save() prohibited to prevent data loss due to unsaved related object 'parent'."
|
||||
with self.assertRaisesMessage(ValueError, msg):
|
||||
ToFieldChild.objects.create(parent=p)
|
||||
|
||||
# Creation using attname keyword argument and an id will cause the
|
||||
# related object to be fetched.
|
||||
|
||||
Reference in New Issue
Block a user