1
0
mirror of https://github.com/django/django.git synced 2024-12-22 17:16:24 +00:00

Fixed #9104 -- Moved FieldDoesNotExist to core.exceptions

This commit is contained in:
Daniel Pyrathon 2015-01-02 16:14:23 +01:00 committed by Tim Graham
parent 1aa3e09c20
commit 8958170755
22 changed files with 73 additions and 60 deletions

View File

@ -5,8 +5,8 @@ from itertools import chain
from django.contrib.admin.utils import get_fields_from_path, NotRelationField, flatten from django.contrib.admin.utils import get_fields_from_path, NotRelationField, flatten
from django.core import checks from django.core import checks
from django.core.exceptions import FieldDoesNotExist
from django.db import models from django.db import models
from django.db.models.fields import FieldDoesNotExist
from django.forms.models import BaseModelForm, _get_foreign_key, BaseModelFormSet from django.forms.models import BaseModelForm, _get_foreign_key, BaseModelFormSet
@ -53,7 +53,7 @@ class BaseModelAdminChecks(object):
try: try:
field = model._meta.get_field(field_name) field = model._meta.get_field(field_name)
except models.FieldDoesNotExist: except FieldDoesNotExist:
return refer_to_missing_field(field=field_name, option=label, return refer_to_missing_field(field=field_name, option=label,
model=model, obj=cls, id='admin.E002') model=model, obj=cls, id='admin.E002')
else: else:
@ -168,7 +168,7 @@ class BaseModelAdminChecks(object):
else: else:
try: try:
field = model._meta.get_field(field_name) field = model._meta.get_field(field_name)
except models.FieldDoesNotExist: except FieldDoesNotExist:
# If we can't find a field on the model that matches, it could # If we can't find a field on the model that matches, it could
# be an extra field on the form. # be an extra field on the form.
return [] return []
@ -248,7 +248,7 @@ class BaseModelAdminChecks(object):
try: try:
field = model._meta.get_field(field_name) field = model._meta.get_field(field_name)
except models.FieldDoesNotExist: except FieldDoesNotExist:
return refer_to_missing_field(field=field_name, option=label, return refer_to_missing_field(field=field_name, option=label,
model=model, obj=cls, id='admin.E019') model=model, obj=cls, id='admin.E019')
else: else:
@ -277,7 +277,7 @@ class BaseModelAdminChecks(object):
try: try:
field = model._meta.get_field(field_name) field = model._meta.get_field(field_name)
except models.FieldDoesNotExist: except FieldDoesNotExist:
return refer_to_missing_field(field=field_name, option=label, return refer_to_missing_field(field=field_name, option=label,
model=model, obj=cls, id='admin.E022') model=model, obj=cls, id='admin.E022')
else: else:
@ -357,7 +357,7 @@ class BaseModelAdminChecks(object):
try: try:
field = model._meta.get_field(field_name) field = model._meta.get_field(field_name)
except models.FieldDoesNotExist: except FieldDoesNotExist:
return refer_to_missing_field(field=field_name, option=label, return refer_to_missing_field(field=field_name, option=label,
model=model, obj=cls, id='admin.E027') model=model, obj=cls, id='admin.E027')
else: else:
@ -394,7 +394,7 @@ class BaseModelAdminChecks(object):
try: try:
model._meta.get_field(field_name) model._meta.get_field(field_name)
except models.FieldDoesNotExist: except FieldDoesNotExist:
return refer_to_missing_field(field=field_name, option=label, return refer_to_missing_field(field=field_name, option=label,
model=model, obj=cls, id='admin.E030') model=model, obj=cls, id='admin.E030')
else: else:
@ -439,7 +439,7 @@ class BaseModelAdminChecks(object):
try: try:
model._meta.get_field(field_name) model._meta.get_field(field_name)
except models.FieldDoesNotExist: except FieldDoesNotExist:
return refer_to_missing_field(field=field_name, option=label, return refer_to_missing_field(field=field_name, option=label,
model=model, obj=cls, id='admin.E033') model=model, obj=cls, id='admin.E033')
else: else:
@ -468,7 +468,7 @@ class BaseModelAdminChecks(object):
else: else:
try: try:
model._meta.get_field(field_name) model._meta.get_field(field_name)
except models.FieldDoesNotExist: except FieldDoesNotExist:
return [ return [
checks.Error( checks.Error(
"The value of '%s' is not a callable, an attribute of '%s', or an attribute of '%s.%s'." % ( "The value of '%s' is not a callable, an attribute of '%s', or an attribute of '%s.%s'." % (
@ -581,7 +581,7 @@ class ModelAdminChecks(BaseModelAdminChecks):
# getattr(model, item) could be an X_RelatedObjectsDescriptor # getattr(model, item) could be an X_RelatedObjectsDescriptor
try: try:
field = model._meta.get_field(item) field = model._meta.get_field(item)
except models.FieldDoesNotExist: except FieldDoesNotExist:
try: try:
field = getattr(model, item) field = getattr(model, item)
except AttributeError: except AttributeError:
@ -613,7 +613,7 @@ class ModelAdminChecks(BaseModelAdminChecks):
else: else:
try: try:
model._meta.get_field(item) model._meta.get_field(item)
except models.FieldDoesNotExist: except FieldDoesNotExist:
return [ return [
# This is a deliberate repeat of E108; there's more than one path # This is a deliberate repeat of E108; there's more than one path
# required to test this condition. # required to test this condition.
@ -763,7 +763,7 @@ class ModelAdminChecks(BaseModelAdminChecks):
def _check_list_editable_item(self, cls, model, field_name, label): def _check_list_editable_item(self, cls, model, field_name, label):
try: try:
field = model._meta.get_field_by_name(field_name)[0] field = model._meta.get_field_by_name(field_name)[0]
except models.FieldDoesNotExist: except FieldDoesNotExist:
return refer_to_missing_field(field=field_name, option=label, return refer_to_missing_field(field=field_name, option=label,
model=model, obj=cls, id='admin.E121') model=model, obj=cls, id='admin.E121')
else: else:
@ -833,7 +833,7 @@ class ModelAdminChecks(BaseModelAdminChecks):
else: else:
try: try:
field = model._meta.get_field(cls.date_hierarchy) field = model._meta.get_field(cls.date_hierarchy)
except models.FieldDoesNotExist: except FieldDoesNotExist:
return refer_to_missing_field(option='date_hierarchy', return refer_to_missing_field(option='date_hierarchy',
field=cls.date_hierarchy, field=cls.date_hierarchy,
model=model, obj=cls, id='admin.E127') model=model, obj=cls, id='admin.E127')

View File

@ -20,12 +20,12 @@ from django.contrib.admin.templatetags.admin_urls import add_preserved_filters
from django.contrib.auth import get_permission_codename from django.contrib.auth import get_permission_codename
from django.core import checks from django.core import checks
from django.core.exceptions import (PermissionDenied, ValidationError, from django.core.exceptions import (PermissionDenied, ValidationError,
FieldError, ImproperlyConfigured) FieldDoesNotExist, FieldError, ImproperlyConfigured)
from django.core.paginator import Paginator from django.core.paginator import Paginator
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.db import models, transaction, router from django.db import models, transaction, router
from django.db.models.constants import LOOKUP_SEP from django.db.models.constants import LOOKUP_SEP
from django.db.models.fields import BLANK_CHOICE_DASH, FieldDoesNotExist from django.db.models.fields import BLANK_CHOICE_DASH
from django.db.models.fields.related import ForeignObjectRel from django.db.models.fields.related import ForeignObjectRel
from django.db.models.sql.constants import QUERY_TERMS from django.db.models.sql.constants import QUERY_TERMS
from django.forms.formsets import all_valid, DELETION_FIELD_NAME from django.forms.formsets import all_valid, DELETION_FIELD_NAME
@ -1381,7 +1381,7 @@ class ModelAdmin(BaseModelAdmin):
for k in initial: for k in initial:
try: try:
f = self.model._meta.get_field(k) f = self.model._meta.get_field(k)
except models.FieldDoesNotExist: except FieldDoesNotExist:
continue continue
# We have to special-case M2Ms as a list of comma-separated PKs. # We have to special-case M2Ms as a list of comma-separated PKs.
if isinstance(f, models.ManyToManyField): if isinstance(f, models.ManyToManyField):

View File

@ -5,6 +5,7 @@ import datetime
import decimal import decimal
from django.contrib.auth import get_permission_codename from django.contrib.auth import get_permission_codename
from django.core.exceptions import FieldDoesNotExist
from django.db import models from django.db import models
from django.db.models.constants import LOOKUP_SEP from django.db.models.constants import LOOKUP_SEP
from django.db.models.deletion import Collector from django.db.models.deletion import Collector
@ -265,7 +266,7 @@ def lookup_field(name, obj, model_admin=None):
opts = obj._meta opts = obj._meta
try: try:
f = opts.get_field(name) f = opts.get_field(name)
except models.FieldDoesNotExist: except FieldDoesNotExist:
# For non-field values, the value is either a method, property or # For non-field values, the value is either a method, property or
# returned via a callable. # returned via a callable.
if callable(name): if callable(name):
@ -306,7 +307,7 @@ def label_for_field(name, model, model_admin=None, return_attr=False):
except AttributeError: except AttributeError:
# field is likely a ForeignObjectRel # field is likely a ForeignObjectRel
label = field.opts.verbose_name label = field.opts.verbose_name
except models.FieldDoesNotExist: except FieldDoesNotExist:
if name == "__unicode__": if name == "__unicode__":
label = force_text(model._meta.verbose_name) label = force_text(model._meta.verbose_name)
attr = six.text_type attr = six.text_type
@ -349,7 +350,7 @@ def help_text_for_field(name, model):
help_text = "" help_text = ""
try: try:
field_data = model._meta.get_field_by_name(name) field_data = model._meta.get_field_by_name(name)
except models.FieldDoesNotExist: except FieldDoesNotExist:
pass pass
else: else:
field = field_data[0] field = field_data[0]

View File

@ -1,6 +1,5 @@
from django.core.exceptions import ImproperlyConfigured from django.core.exceptions import FieldDoesNotExist, ImproperlyConfigured
from django.db import models from django.db import models
from django.db.models.fields import FieldDoesNotExist
from django.forms.models import BaseModelForm, BaseModelFormSet, _get_foreign_key from django.forms.models import BaseModelForm, BaseModelFormSet, _get_foreign_key
from django.contrib.admin.utils import get_fields_from_path, NotRelationField from django.contrib.admin.utils import get_fields_from_path, NotRelationField
@ -42,7 +41,7 @@ class BaseValidator(object):
continue continue
try: try:
f = model._meta.get_field(field) f = model._meta.get_field(field)
except models.FieldDoesNotExist: except FieldDoesNotExist:
# If we can't find a field on the model that matches, it could be an # If we can't find a field on the model that matches, it could be an
# extra field on the form; nothing to check so move on to the next field. # extra field on the form; nothing to check so move on to the next field.
continue continue
@ -196,7 +195,7 @@ class BaseValidator(object):
if not hasattr(model, field): if not hasattr(model, field):
try: try:
model._meta.get_field(field) model._meta.get_field(field)
except models.FieldDoesNotExist: except FieldDoesNotExist:
raise ImproperlyConfigured( raise ImproperlyConfigured(
"%s.readonly_fields[%d], %r is not a callable or " "%s.readonly_fields[%d], %r is not a callable or "
"an attribute of %r or found in the model %r." "an attribute of %r or found in the model %r."
@ -250,7 +249,7 @@ class ModelAdminValidator(BaseValidator):
if not hasattr(model, field): if not hasattr(model, field):
try: try:
model._meta.get_field(field) model._meta.get_field(field)
except models.FieldDoesNotExist: except FieldDoesNotExist:
raise ImproperlyConfigured( raise ImproperlyConfigured(
"%s.list_display[%d], %r is not a callable or " "%s.list_display[%d], %r is not a callable or "
"an attribute of %r or found in the model %r." "an attribute of %r or found in the model %r."
@ -348,7 +347,7 @@ class ModelAdminValidator(BaseValidator):
for idx, field_name in enumerate(cls.list_editable): for idx, field_name in enumerate(cls.list_editable):
try: try:
field = model._meta.get_field_by_name(field_name)[0] field = model._meta.get_field_by_name(field_name)[0]
except models.FieldDoesNotExist: except FieldDoesNotExist:
raise ImproperlyConfigured("'%s.list_editable[%d]' refers to a " raise ImproperlyConfigured("'%s.list_editable[%d]' refers to a "
"field, '%s', not defined on %s.%s." "field, '%s', not defined on %s.%s."
% (cls.__name__, idx, field_name, model._meta.app_label, model.__name__)) % (cls.__name__, idx, field_name, model._meta.app_label, model.__name__))
@ -429,7 +428,7 @@ def check_isdict(cls, label, obj):
def get_field(cls, model, label, field): def get_field(cls, model, label, field):
try: try:
return model._meta.get_field(field) return model._meta.get_field(field)
except models.FieldDoesNotExist: except FieldDoesNotExist:
raise ImproperlyConfigured("'%s.%s' refers to field '%s' that is missing from model '%s.%s'." raise ImproperlyConfigured("'%s.%s' refers to field '%s' that is missing from model '%s.%s'."
% (cls.__name__, label, field, model._meta.app_label, model.__name__)) % (cls.__name__, label, field, model._meta.app_label, model.__name__))
@ -437,7 +436,7 @@ def get_field(cls, model, label, field):
def fetch_attr(cls, model, label, field): def fetch_attr(cls, model, label, field):
try: try:
return model._meta.get_field(field) return model._meta.get_field(field)
except models.FieldDoesNotExist: except FieldDoesNotExist:
pass pass
try: try:
return getattr(model, field) return getattr(model, field)

View File

@ -1,11 +1,10 @@
from collections import OrderedDict from collections import OrderedDict
import sys import sys
from django.core.exceptions import SuspiciousOperation, ImproperlyConfigured from django.core.exceptions import FieldDoesNotExist, SuspiciousOperation, ImproperlyConfigured
from django.core.paginator import InvalidPage from django.core.paginator import InvalidPage
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.db import models from django.db import models
from django.db.models.fields import FieldDoesNotExist
from django.utils import six from django.utils import six
from django.utils.encoding import force_text from django.utils.encoding import force_text
from django.utils.translation import ugettext, ugettext_lazy from django.utils.translation import ugettext, ugettext_lazy
@ -226,7 +225,7 @@ class ChangeList(object):
try: try:
field = self.lookup_opts.get_field(field_name) field = self.lookup_opts.get_field(field_name)
return field.name return field.name
except models.FieldDoesNotExist: except FieldDoesNotExist:
# See whether field_name is a name of a non-field # See whether field_name is a name of a non-field
# that allows sorting. # that allows sorting.
if callable(field_name): if callable(field_name):
@ -377,7 +376,7 @@ class ChangeList(object):
for field_name in self.list_display: for field_name in self.list_display:
try: try:
field = self.lookup_opts.get_field(field_name) field = self.lookup_opts.get_field(field_name)
except models.FieldDoesNotExist: except FieldDoesNotExist:
pass pass
else: else:
if isinstance(field.rel, models.ManyToOneRel): if isinstance(field.rel, models.ManyToOneRel):

View File

@ -9,7 +9,7 @@ from django.contrib.contenttypes.forms import (
BaseGenericInlineFormSet, generic_inlineformset_factory BaseGenericInlineFormSet, generic_inlineformset_factory
) )
from django.core import checks from django.core import checks
from django.db.models.fields import FieldDoesNotExist from django.core.exceptions import FieldDoesNotExist
from django.forms import ALL_FIELDS from django.forms import ALL_FIELDS
from django.forms.models import modelform_defines_fields from django.forms.models import modelform_defines_fields

View File

@ -3,10 +3,10 @@ from __future__ import unicode_literals
from collections import defaultdict from collections import defaultdict
from django.core import checks from django.core import checks
from django.core.exceptions import ObjectDoesNotExist from django.core.exceptions import FieldDoesNotExist, ObjectDoesNotExist
from django.db import connection from django.db import connection
from django.db import models, router, transaction, DEFAULT_DB_ALIAS from django.db import models, router, transaction, DEFAULT_DB_ALIAS
from django.db.models import signals, FieldDoesNotExist, DO_NOTHING from django.db.models import signals, DO_NOTHING
from django.db.models.base import ModelBase from django.db.models.base import ModelBase
from django.db.models.fields.related import ForeignObject, ForeignObjectRel from django.db.models.fields.related import ForeignObject, ForeignObjectRel
from django.db.models.query_utils import PathInfo from django.db.models.query_utils import PathInfo

View File

@ -1,8 +1,8 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import re import re
from django.core.exceptions import FieldDoesNotExist
from django.db.models.constants import LOOKUP_SEP from django.db.models.constants import LOOKUP_SEP
from django.db.models.fields import FieldDoesNotExist
from django.db.models.lookups import Lookup from django.db.models.lookups import Lookup
from django.db.models.expressions import ExpressionNode, Col from django.db.models.expressions import ExpressionNode, Col
from django.utils import six from django.utils import six

View File

@ -4,8 +4,8 @@ from django.apps import apps
from django.http import Http404 from django.http import Http404
from django.contrib.gis.db.models.fields import GeometryField from django.contrib.gis.db.models.fields import GeometryField
from django.contrib.gis.shortcuts import render_to_kml, render_to_kmz from django.contrib.gis.shortcuts import render_to_kml, render_to_kmz
from django.core.exceptions import FieldDoesNotExist
from django.db import connections, DEFAULT_DB_ALIAS from django.db import connections, DEFAULT_DB_ALIAS
from django.db.models.fields import FieldDoesNotExist
def kml(request, label, model, field_name=None, compress=False, using=DEFAULT_DB_ALIAS): def kml(request, label, model, field_name=None, compress=False, using=DEFAULT_DB_ALIAS):

View File

@ -8,7 +8,7 @@
""" """
import sys import sys
from decimal import Decimal, InvalidOperation as DecimalInvalidOperation from decimal import Decimal, InvalidOperation as DecimalInvalidOperation
from django.core.exceptions import ObjectDoesNotExist from django.core.exceptions import FieldDoesNotExist, ObjectDoesNotExist
from django.db import connections, router from django.db import connections, router
from django.contrib.gis.db.models import GeometryField from django.contrib.gis.db.models import GeometryField
from django.contrib.gis.gdal import (CoordTransform, DataSource, from django.contrib.gis.gdal import (CoordTransform, DataSource,
@ -189,7 +189,7 @@ class LayerMapping(object):
# for the given field name in the mapping. # for the given field name in the mapping.
try: try:
model_field = self.model._meta.get_field(field_name) model_field = self.model._meta.get_field(field_name)
except models.fields.FieldDoesNotExist: except FieldDoesNotExist:
raise LayerMapError('Given mapping field "%s" not in given Model fields.' % field_name) raise LayerMapError('Given mapping field "%s" not in given Model fields.' % field_name)
# Getting the string name for the Django field class (e.g., 'PointField'). # Getting the string name for the Django field class (e.g., 'PointField').
@ -231,7 +231,7 @@ class LayerMapping(object):
idx = check_ogr_fld(ogr_field) idx = check_ogr_fld(ogr_field)
try: try:
rel_model._meta.get_field(rel_name) rel_model._meta.get_field(rel_name)
except models.fields.FieldDoesNotExist: except FieldDoesNotExist:
raise LayerMapError('ForeignKey mapping field "%s" not in %s fields.' % raise LayerMapError('ForeignKey mapping field "%s" not in %s fields.' %
(rel_name, rel_model.__class__.__name__)) (rel_name, rel_model.__class__.__name__))
fields_val = rel_model fields_val = rel_model

View File

@ -3,8 +3,8 @@ from __future__ import unicode_literals
from django.conf import settings from django.conf import settings
from django.core import checks from django.core import checks
from django.core.exceptions import FieldDoesNotExist
from django.db import models from django.db import models
from django.db.models.fields import FieldDoesNotExist
class CurrentSiteManager(models.Manager): class CurrentSiteManager(models.Manager):

View File

@ -5,6 +5,11 @@ from django.utils import six
from django.utils.encoding import force_text from django.utils.encoding import force_text
class FieldDoesNotExist(Exception):
"""The requested model field does not exist"""
pass
class DjangoRuntimeWarning(RuntimeWarning): class DjangoRuntimeWarning(RuntimeWarning):
pass pass

View File

@ -9,14 +9,14 @@ from django.apps import apps
from django.apps.config import MODELS_MODULE_NAME from django.apps.config import MODELS_MODULE_NAME
from django.conf import settings from django.conf import settings
from django.core import checks from django.core import checks
from django.core.exceptions import (ObjectDoesNotExist, from django.core.exceptions import (FieldDoesNotExist, ObjectDoesNotExist,
MultipleObjectsReturned, FieldError, ValidationError, NON_FIELD_ERRORS) MultipleObjectsReturned, FieldError, ValidationError, NON_FIELD_ERRORS)
from django.db import (router, connections, transaction, DatabaseError, from django.db import (router, connections, transaction, DatabaseError,
DEFAULT_DB_ALIAS, DJANGO_VERSION_PICKLE_KEY) DEFAULT_DB_ALIAS, DJANGO_VERSION_PICKLE_KEY)
from django.db.models import signals from django.db.models import signals
from django.db.models.constants import LOOKUP_SEP from django.db.models.constants import LOOKUP_SEP
from django.db.models.deletion import Collector from django.db.models.deletion import Collector
from django.db.models.fields import AutoField, FieldDoesNotExist from django.db.models.fields import AutoField
from django.db.models.fields.related import (ForeignObjectRel, ManyToOneRel, from django.db.models.fields.related import (ForeignObjectRel, ManyToOneRel,
OneToOneField, add_lazy_relation) OneToOneField, add_lazy_relation)
from django.db.models.manager import ensure_default_manager from django.db.models.manager import ensure_default_manager
@ -1443,7 +1443,7 @@ class Model(six.with_metaclass(ModelBase)):
try: try:
field = cls._meta.get_field(field_name, field = cls._meta.get_field(field_name,
many_to_many=True) many_to_many=True)
except models.FieldDoesNotExist: except FieldDoesNotExist:
errors.append( errors.append(
checks.Error( checks.Error(
"'%s' refers to the non-existent field '%s'." % (option, field_name), "'%s' refers to the non-existent field '%s'." % (option, field_name),
@ -1485,8 +1485,6 @@ class Model(six.with_metaclass(ModelBase)):
""" Check "ordering" option -- is it a list of strings and do all fields """ Check "ordering" option -- is it a list of strings and do all fields
exist? """ exist? """
from django.db.models import FieldDoesNotExist
if not cls._meta.ordering: if not cls._meta.ordering:
return [] return []

View File

@ -31,6 +31,9 @@ from django.utils.ipv6 import clean_ipv6_address
from django.utils import six from django.utils import six
from django.utils.itercompat import is_iterable from django.utils.itercompat import is_iterable
# imported for backwards compatibility
from django.core.exceptions import FieldDoesNotExist # NOQA
# Avoid "TypeError: Item in ``from list'' not a string" -- unicode_literals # Avoid "TypeError: Item in ``from list'' not a string" -- unicode_literals
# makes these strings unicode # makes these strings unicode
__all__ = [str(x) for x in ( __all__ = [str(x) for x in (
@ -61,10 +64,6 @@ def _load_field(app_label, model_name, field_name):
return apps.get_model(app_label, model_name)._meta.get_field_by_name(field_name)[0] return apps.get_model(app_label, model_name)._meta.get_field_by_name(field_name)[0]
class FieldDoesNotExist(Exception):
pass
# A guide to Field parameters: # A guide to Field parameters:
# #
# * name: The name of the field specified in the model. # * name: The name of the field specified in the model.

View File

@ -5,13 +5,13 @@ import warnings
from django.apps import apps from django.apps import apps
from django.core import checks from django.core import checks
from django.core.exceptions import FieldDoesNotExist
from django.db import connection, connections, router, transaction from django.db import connection, connections, router, transaction
from django.db.backends import utils from django.db.backends import utils
from django.db.models import signals, Q from django.db.models import signals, Q
from django.db.models.deletion import SET_NULL, SET_DEFAULT, CASCADE from django.db.models.deletion import SET_NULL, SET_DEFAULT, CASCADE
from django.db.models.fields import (AutoField, Field, IntegerField, from django.db.models.fields import (AutoField, Field, IntegerField,
PositiveIntegerField, PositiveSmallIntegerField, FieldDoesNotExist, PositiveIntegerField, PositiveSmallIntegerField, BLANK_CHOICE_DASH)
BLANK_CHOICE_DASH)
from django.db.models.lookups import IsNull from django.db.models.lookups import IsNull
from django.db.models.query import QuerySet from django.db.models.query import QuerySet
from django.db.models.query_utils import PathInfo from django.db.models.query_utils import PathInfo

View File

@ -2,9 +2,9 @@ import copy
from importlib import import_module from importlib import import_module
import inspect import inspect
from django.core.exceptions import FieldDoesNotExist
from django.db import router from django.db import router
from django.db.models.query import QuerySet from django.db.models.query import QuerySet
from django.db.models.fields import FieldDoesNotExist
from django.utils import six from django.utils import six
from django.utils.encoding import python_2_unicode_compatible from django.utils.encoding import python_2_unicode_compatible

View File

@ -5,8 +5,9 @@ from collections import OrderedDict
from django.apps import apps from django.apps import apps
from django.conf import settings from django.conf import settings
from django.core.exceptions import FieldDoesNotExist
from django.db.models.fields.related import ManyToManyRel from django.db.models.fields.related import ManyToManyRel
from django.db.models.fields import AutoField, FieldDoesNotExist from django.db.models.fields import AutoField
from django.db.models.fields.proxy import OrderWrt from django.db.models.fields.proxy import OrderWrt
from django.utils import six from django.utils import six
from django.utils.encoding import force_text, smart_text, python_2_unicode_compatible from django.utils.encoding import force_text, smart_text, python_2_unicode_compatible

View File

@ -10,6 +10,7 @@ from __future__ import unicode_literals
from collections import namedtuple from collections import namedtuple
from django.apps import apps from django.apps import apps
from django.core.exceptions import FieldDoesNotExist
from django.db.backends import utils from django.db.backends import utils
from django.db.models.constants import LOOKUP_SEP from django.db.models.constants import LOOKUP_SEP
from django.utils import six from django.utils import six
@ -99,7 +100,6 @@ class DeferredAttribute(object):
Retrieves and caches the value from the datastore on the first lookup. Retrieves and caches the value from the datastore on the first lookup.
Returns the cached value. Returns the cached value.
""" """
from django.db.models.fields import FieldDoesNotExist
non_deferred_model = instance._meta.proxy_for_model non_deferred_model = instance._meta.proxy_for_model
opts = non_deferred_model._meta opts = non_deferred_model._meta

View File

@ -13,12 +13,11 @@ from collections import Mapping, OrderedDict
import copy import copy
import warnings import warnings
from django.core.exceptions import FieldError from django.core.exceptions import FieldDoesNotExist, FieldError
from django.db import connections, DEFAULT_DB_ALIAS from django.db import connections, DEFAULT_DB_ALIAS
from django.db.models.aggregates import Count from django.db.models.aggregates import Count
from django.db.models.constants import LOOKUP_SEP from django.db.models.constants import LOOKUP_SEP
from django.db.models.expressions import Col, Ref from django.db.models.expressions import Col, Ref
from django.db.models.fields import FieldDoesNotExist
from django.db.models.query_utils import PathInfo, Q, refs_aggregate from django.db.models.query_utils import PathInfo, Q, refs_aggregate
from django.db.models.sql.constants import (QUERY_TERMS, ORDER_DIR, SINGLE, from django.db.models.sql.constants import (QUERY_TERMS, ORDER_DIR, SINGLE,
ORDER_PATTERN, SelectInfo, INNER, LOUTER) ORDER_PATTERN, SelectInfo, INNER, LOUTER)

View File

@ -33,6 +33,19 @@ ObjectDoesNotExist and DoesNotExist
See :meth:`~django.db.models.query.QuerySet.get()` for further information See :meth:`~django.db.models.query.QuerySet.get()` for further information
on :exc:`ObjectDoesNotExist` and :exc:`DoesNotExist`. on :exc:`ObjectDoesNotExist` and :exc:`DoesNotExist`.
FieldDoesNotExist
-----------------
.. exception:: FieldDoesNotExist
The ``FieldDoesNotExist`` exception is raised by a model's
``_meta.get_field()`` method when the requested field does not exist on the
model or on the model's parents.
.. versionchanged:: 1.8
This exception was previously defined only in
``django.db.models.fields`` and wasn't part of the public API.
MultipleObjectsReturned MultipleObjectsReturned
----------------------- -----------------------
.. exception:: MultipleObjectsReturned .. exception:: MultipleObjectsReturned

View File

@ -2,12 +2,11 @@ from __future__ import unicode_literals
import datetime import datetime
from decimal import Decimal from decimal import Decimal
from django.core.exceptions import FieldError from django.core.exceptions import FieldDoesNotExist, FieldError
from django.db.models import ( from django.db.models import (
Sum, Count, Sum, Count,
F, Value, Func, F, Value, Func,
IntegerField, BooleanField, CharField) IntegerField, BooleanField, CharField)
from django.db.models.fields import FieldDoesNotExist
from django.test import TestCase from django.test import TestCase
from django.utils import six from django.utils import six

View File

@ -1,7 +1,7 @@
from django import test from django import test
from django.db.models.fields import related, CharField, Field, FieldDoesNotExist
from django.contrib.contenttypes.fields import GenericRelation from django.contrib.contenttypes.fields import GenericRelation
from django.core.exceptions import FieldDoesNotExist
from django.db.models.fields import related, CharField, Field
from .models import ( from .models import (
AbstractPerson, BasePerson, Person, Relating, Relation AbstractPerson, BasePerson, Person, Relating, Relation