From ce993efda876b19569267badb6af5fd0e80cdee3 Mon Sep 17 00:00:00 2001 From: Craig de Stigter Date: Thu, 29 May 2014 10:26:57 +1200 Subject: Fixed #22690 -- Added a check for proxy models containing fields. Removed the FieldError raised by ModelBase.__new__ in this case. --- django/db/models/base.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) (limited to 'django') diff --git a/django/db/models/base.py b/django/db/models/base.py index b223764879..11dcb5ba3e 100644 --- a/django/db/models/base.py +++ b/django/db/models/base.py @@ -194,9 +194,6 @@ class ModelBase(type): base = parent if base is None: raise TypeError("Proxy model '%s' has no non-abstract model base class." % name) - if (new_class._meta.local_fields or - new_class._meta.local_many_to_many): - raise FieldError("Proxy model '%s' contains model fields." % name) new_class._meta.setup_proxy(base) new_class._meta.concrete_model = base._meta.concrete_model else: @@ -1047,6 +1044,7 @@ class Model(six.with_metaclass(ModelBase)): def check(cls, **kwargs): errors = [] errors.extend(cls._check_swappable()) + errors.extend(cls._check_model()) errors.extend(cls._check_managers(**kwargs)) if not cls._meta.swapped: errors.extend(cls._check_fields(**kwargs)) @@ -1094,6 +1092,21 @@ class Model(six.with_metaclass(ModelBase)): ) return errors + @classmethod + def _check_model(cls): + errors = [] + if cls._meta.proxy: + if cls._meta.local_fields or cls._meta.local_many_to_many: + errors.append( + checks.Error( + "Proxy model '%s' contains model fields." % cls.__name__, + hint=None, + obj=None, + id='models.E017', + ) + ) + return errors + @classmethod def _check_managers(cls, **kwargs): """ Perform all manager checks. """ -- cgit v1.3