Fixed #2363 -- Improved base class checking in ModelBase metaclass. Thanks to
combined work from phil.h.smith@gmail.com and Chris.Wesseling@cwi.nl. git-svn-id: http://code.djangoproject.com/svn/django/trunk@4881 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
04c155fd06
commit
1109e722aa
|
@ -22,7 +22,11 @@ class ModelBase(type):
|
||||||
"Metaclass for all models"
|
"Metaclass for all models"
|
||||||
def __new__(cls, name, bases, attrs):
|
def __new__(cls, name, bases, attrs):
|
||||||
# If this isn't a subclass of Model, don't do anything special.
|
# If this isn't a subclass of Model, don't do anything special.
|
||||||
if name == 'Model' or not filter(lambda b: issubclass(b, Model), bases):
|
try:
|
||||||
|
if not filter(lambda b: issubclass(b, Model), bases):
|
||||||
|
return super(ModelBase, cls).__new__(cls, name, bases, attrs)
|
||||||
|
except NameError:
|
||||||
|
# Model isn't defined yet, meaning we're looking at django's own Model defined below
|
||||||
return super(ModelBase, cls).__new__(cls, name, bases, attrs)
|
return super(ModelBase, cls).__new__(cls, name, bases, attrs)
|
||||||
|
|
||||||
# Create the class.
|
# Create the class.
|
||||||
|
|
|
@ -97,6 +97,16 @@ class SelfClashM2M(models.Model):
|
||||||
m2m_3 = models.ManyToManyField('self', symmetrical=False)
|
m2m_3 = models.ManyToManyField('self', symmetrical=False)
|
||||||
m2m_4 = models.ManyToManyField('self', symmetrical=False)
|
m2m_4 = models.ManyToManyField('self', symmetrical=False)
|
||||||
|
|
||||||
|
class Model(models.Model):
|
||||||
|
"But it's valid to call a model Model."
|
||||||
|
year = models.PositiveIntegerField() #1960
|
||||||
|
make = models.CharField(maxlength=10) #Aston Martin
|
||||||
|
name = models.CharField(maxlength=10) #DB 4 GT
|
||||||
|
|
||||||
|
class Car(models.Model):
|
||||||
|
colour = models.CharField(maxlength=5)
|
||||||
|
model = models.ForeignKey(Model)
|
||||||
|
|
||||||
model_errors = """invalid_models.fielderrors: "charfield": CharFields require a "maxlength" attribute.
|
model_errors = """invalid_models.fielderrors: "charfield": CharFields require a "maxlength" attribute.
|
||||||
invalid_models.fielderrors: "floatfield": FloatFields require a "decimal_places" attribute.
|
invalid_models.fielderrors: "floatfield": FloatFields require a "decimal_places" attribute.
|
||||||
invalid_models.fielderrors: "floatfield": FloatFields require a "max_digits" attribute.
|
invalid_models.fielderrors: "floatfield": FloatFields require a "max_digits" attribute.
|
||||||
|
|
Loading…
Reference in New Issue