diff options
Diffstat (limited to 'tests/many_to_one_null/tests.py')
-rw-r--r-- | tests/many_to_one_null/tests.py | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/tests/many_to_one_null/tests.py b/tests/many_to_one_null/tests.py index 5bd06b1ac4..f92d49f0a9 100644 --- a/tests/many_to_one_null/tests.py +++ b/tests/many_to_one_null/tests.py @@ -146,3 +146,36 @@ class ManyToOneNullTests(TestCase): self.assertIs(d1.car, None) with self.assertNumQueries(0): self.assertEqual(list(c1.drivers.all()), []) + + def test_unsaved(self): + msg = ( + "'Car' instance needs to have a primary key value before this relationship " + "can be used." + ) + with self.assertRaisesMessage(ValueError, msg): + Car(make="Ford").drivers.all() + + def test_related_null_to_field_related_managers(self): + car = Car.objects.create(make=None) + driver = Driver.objects.create() + msg = ( + f'"{car!r}" needs to have a value for field "make" before this ' + f"relationship can be used." + ) + with self.assertRaisesMessage(ValueError, msg): + car.drivers.add(driver) + with self.assertRaisesMessage(ValueError, msg): + car.drivers.create() + with self.assertRaisesMessage(ValueError, msg): + car.drivers.get_or_create() + with self.assertRaisesMessage(ValueError, msg): + car.drivers.update_or_create() + with self.assertRaisesMessage(ValueError, msg): + car.drivers.remove(driver) + with self.assertRaisesMessage(ValueError, msg): + car.drivers.clear() + with self.assertRaisesMessage(ValueError, msg): + car.drivers.set([driver]) + + with self.assertNumQueries(0): + self.assertEqual(car.drivers.count(), 0) |