Исключение FieldDoesNotExist

Исключение FieldDoesNotExist является подклассом FieldError и выбрасывается в тех случаях, когда происходит обращение к полю модели, которое не было определено в ее структуре. Это исключение чаще всего возникает при использовании методов работы с полями, таких как get_field, или при попытке получить поле по имени, которого нет в модели. Исключение помогает разработчикам быстро обнаружить опечатки в названиях полей или ошибки в структуре модели.

Синтаксис

pythonraise FieldDoesNotExist("Field 'field_name' does not exist")

Пример

Рассмотрим ситуацию, когда мы пытаемся получить поле, которого нет в модели:

pythonfrom myapp.models import Article
from django.core.exceptions import FieldDoesNotExist

try:
  field = Article._meta.get_field('non_existent_field')
except FieldDoesNotExist as e:
  print(e)

Результат выполнения кода:

python"myapp.Article has no field named 'non_existent_field'"

Пример

Обработка исключения при получении списка всех полей модели:

pythonfrom myapp.models import Article
from django.core.exceptions import FieldDoesNotExist

def get_field_type(model, field_name):
  try:
    field = model._meta.get_field(field_name)
    return field.get_internal_type()
  except FieldDoesNotExist:
    return f"Field '{field_name}' not found in {model.__name__}"

res = get_field_type(Article, 'status')
print(res)

Результат выполнения кода:

python"Field 'status' not found in Article"

Пример

Пример использования в цикле при проверке наличия нескольких полей:

pythonfrom myapp.models import User
from django.core.exceptions import FieldDoesNotExist

fields_to_check = ['username', 'email', 'age']
missing_fields = []

for field_name in fields_to_check:
  try:
    User._meta.get_field(field_name)
  except FieldDoesNotExist:
    missing_fields.append(field_name)

print(missing_fields)

Результат выполнения кода:

python"['age']"

Смотрите также

  • исключение FieldError,
    которое является родительским для FieldDoesNotExist
  • исключение DoesNotExist,
    которое возникает при отсутствии объекта в базе данных
  • исключение ObjectDoesNotExist,
    которое является базовым для DoesNotExist
  • исключение RestrictedError,
    которое возникает при попытке удалить защищенный объект