mirror of
https://github.com/django/django.git
synced 2025-10-31 09:41:08 +00:00
Fixed #30657 -- Allowed customizing Field's descriptors with a descriptor_class attribute.
Allows model fields to override the descriptor class used on the model instance attribute.
This commit is contained in:
committed by
Mariusz Felisiak
parent
93ffa81bc5
commit
5ed20b3aa3
@@ -1,7 +1,7 @@
|
||||
from django.db import connection
|
||||
from django.db import connection, models
|
||||
from django.test import SimpleTestCase
|
||||
|
||||
from .fields import CustomTypedField
|
||||
from .fields import CustomDescriptorField, CustomTypedField
|
||||
|
||||
|
||||
class TestDbType(SimpleTestCase):
|
||||
@@ -9,3 +9,26 @@ class TestDbType(SimpleTestCase):
|
||||
def test_db_parameters_respects_db_type(self):
|
||||
f = CustomTypedField()
|
||||
self.assertEqual(f.db_parameters(connection)['type'], 'custom_field')
|
||||
|
||||
|
||||
class DescriptorClassTest(SimpleTestCase):
|
||||
def test_descriptor_class(self):
|
||||
class CustomDescriptorModel(models.Model):
|
||||
name = CustomDescriptorField(max_length=32)
|
||||
|
||||
m = CustomDescriptorModel()
|
||||
self.assertFalse(hasattr(m, '_name_get_count'))
|
||||
# The field is set to its default in the model constructor.
|
||||
self.assertEqual(m._name_set_count, 1)
|
||||
m.name = 'foo'
|
||||
self.assertFalse(hasattr(m, '_name_get_count'))
|
||||
self.assertEqual(m._name_set_count, 2)
|
||||
self.assertEqual(m.name, 'foo')
|
||||
self.assertEqual(m._name_get_count, 1)
|
||||
self.assertEqual(m._name_set_count, 2)
|
||||
m.name = 'bar'
|
||||
self.assertEqual(m._name_get_count, 1)
|
||||
self.assertEqual(m._name_set_count, 3)
|
||||
self.assertEqual(m.name, 'bar')
|
||||
self.assertEqual(m._name_get_count, 2)
|
||||
self.assertEqual(m._name_set_count, 3)
|
||||
|
||||
Reference in New Issue
Block a user