Fixed #18389 -- Fixed the way contribute_to_class is called
Now this method is only called only if the object is an instance. This allows to have field classes as model class attributes.
This commit is contained in:
parent
ddd52b221c
commit
1be03aff5c
|
@ -1,6 +1,7 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
import copy
|
||||
import inspect
|
||||
import sys
|
||||
from functools import update_wrapper
|
||||
import warnings
|
||||
|
@ -299,7 +300,8 @@ class ModelBase(type):
|
|||
cls.add_to_class(mgr_name, new_manager)
|
||||
|
||||
def add_to_class(cls, name, value):
|
||||
if hasattr(value, 'contribute_to_class'):
|
||||
# We should call the contirbute_to_class method only if it's bound
|
||||
if not inspect.isclass(value) and hasattr(value, 'contribute_to_class'):
|
||||
value.contribute_to_class(cls, name)
|
||||
else:
|
||||
setattr(cls, name, value)
|
||||
|
|
|
@ -145,12 +145,22 @@ class VerboseNameField(models.Model):
|
|||
field22 = models.URLField("verbose field22")
|
||||
|
||||
|
||||
# This model isn't used in any test, just here to ensure it validates successfully.
|
||||
###############################################################################
|
||||
# These models aren't used in any test, just here to ensure they validate
|
||||
# successfully.
|
||||
|
||||
# See ticket #16570.
|
||||
class DecimalLessThanOne(models.Model):
|
||||
d = models.DecimalField(max_digits=3, decimal_places=3)
|
||||
|
||||
|
||||
# See ticket #18389.
|
||||
class FieldClassAttributeModel(models.Model):
|
||||
field_class = models.CharField
|
||||
|
||||
###############################################################################
|
||||
|
||||
|
||||
class DataModel(models.Model):
|
||||
short_data = models.BinaryField(max_length=10, default=b'\x08')
|
||||
data = models.BinaryField()
|
||||
|
|
Loading…
Reference in New Issue