summaryrefslogtreecommitdiff
path: root/tests/update_only_fields
diff options
context:
space:
mode:
authorPat Garcia <commonzenmedia@gmail.com>2020-08-11 21:05:03 -0400
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2020-08-12 21:13:55 +0200
commit8954f255bbf5f4ee997fd6de62cb50fc9b5dd697 (patch)
tree289deb388c46eb5d01aa7141bae90db6867975f1 /tests/update_only_fields
parent94ea79be137f3cb30949bf82198e96e094f2650d (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.py10
-rw-r--r--tests/update_only_fields/tests.py10
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'])