diff options
| author | Pat Garcia <commonzenmedia@gmail.com> | 2020-08-11 21:05:03 -0400 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2020-08-12 21:13:55 +0200 |
| commit | 8954f255bbf5f4ee997fd6de62cb50fc9b5dd697 (patch) | |
| tree | 289deb388c46eb5d01aa7141bae90db6867975f1 /tests/update_only_fields | |
| parent | 94ea79be137f3cb30949bf82198e96e094f2650d (diff) | |
Fixed #31382 -- Made Model.save(update_fields=...) raise ValueError on non-concrete fields.
Diffstat (limited to 'tests/update_only_fields')
| -rw-r--r-- | tests/update_only_fields/models.py | 10 | ||||
| -rw-r--r-- | tests/update_only_fields/tests.py | 10 |
2 files changed, 19 insertions, 1 deletions
diff --git a/tests/update_only_fields/models.py b/tests/update_only_fields/models.py index b7100398cd..3bba684d21 100644 --- a/tests/update_only_fields/models.py +++ b/tests/update_only_fields/models.py @@ -22,9 +22,19 @@ class Employee(Person): accounts = models.ManyToManyField('Account', related_name='employees', blank=True) +class NonConcreteField(models.IntegerField): + def db_type(self, connection): + return None + + def get_attname_column(self): + attname, _ = super().get_attname_column() + return attname, None + + class Profile(models.Model): name = models.CharField(max_length=200) salary = models.FloatField(default=1000.0) + non_concrete = NonConcreteField() class ProxyEmployee(Employee): diff --git a/tests/update_only_fields/tests.py b/tests/update_only_fields/tests.py index 58ae94b7cc..65a260338c 100644 --- a/tests/update_only_fields/tests.py +++ b/tests/update_only_fields/tests.py @@ -5,7 +5,10 @@ from .models import Account, Employee, Person, Profile, ProxyEmployee class UpdateOnlyFieldsTests(TestCase): - msg = 'The following fields do not exist in this model or are m2m fields: %s' + msg = ( + 'The following fields do not exist in this model, are m2m fields, or ' + 'are non-concrete fields: %s' + ) def test_update_fields_basic(self): s = Person.objects.create(name='Sara', gender='F') @@ -254,3 +257,8 @@ class UpdateOnlyFieldsTests(TestCase): self.assertEqual(Person.objects.count(), 1) with self.assertNumQueries(2): s.save(update_fields=['name', 'employee_num']) + + def test_update_non_concrete_field(self): + profile_boss = Profile.objects.create(name='Boss', salary=3000) + with self.assertRaisesMessage(ValueError, self.msg % 'non_concrete'): + profile_boss.save(update_fields=['non_concrete']) |
