Поле UUIDField

Поле UUIDField в Django формах предназначено для валидации и обработки данных, представляющих собой универсальные уникальные идентификаторы (UUID). Это поле автоматически преобразует входные данные в объект uuid.UUID и обратно, обеспечивая корректную работу с этим типом данных. Поле принимает строковые представления UUID как в формате с дефисами, так и без них, а также в виде UUID объектов.

Синтаксис

pythonfrom django import forms

class MyForm(forms.Form):
  uuid_field = forms.UUIDField(**options)

Пример

Давайте создадим форму с полем UUIDField для ввода идентификатора пользователя:

pythonfrom django import forms
import uuid

class UserForm(forms.Form):
  user_id = forms.UUIDField(label="User ID", required=True)

Пример

Рассмотрим пример валидации поля с передачей строкового представления UUID:

pythonfrom django import forms
import uuid

class ProductForm(forms.Form):
  product_uuid = forms.UUIDField(label="Product UUID")

# Создание формы с валидными данными
form = ProductForm({
  'product_uuid': '550e8400-e29b-41d4-a716-446655440000'
})

if form.is_valid():
  print("Data is valid")
  print(f"UUID object: {form.cleaned_data['product_uuid']}")
else:
  print("Data is invalid")
  print(form.errors)

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

python"Data is valid"
"UUID object: 550e8400-e29b-41d4-a716-446655440000"

Пример

Поле UUIDField также может принимать UUID объекты напрямую:

pythonfrom django import forms
import uuid

class CategoryForm(forms.Form):
  category_uuid = forms.UUIDField()

# Создание формы с UUID объектом
uuid_obj = uuid.uuid4()
form = CategoryForm({
  'category_uuid': uuid_obj
})

if form.is_valid():
  print("UUID object accepted")
  print(f"Value: {form.cleaned_data['category_uuid']}")
  print(f"Type: {type(form.cleaned_data['category_uuid'])}")

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

python"UUID object accepted"
"Value: a1b2c3d4-e5f6-7890-abcd-ef1234567890"
"Type: <class 'uuid.UUID'>"

Пример

При попытке передать невалидные данные поле выбрасывает ошибку валидации:

pythonfrom django import forms

class TestForm(forms.Form):
  code = forms.UUIDField()

# Создание формы с невалидными данными
form = TestForm({
  'code': 'not-a-uuid-string'
})

if form.is_valid():
  print("Valid")
else:
  print("Invalid")
  print(f"Errors: {form.errors}")

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

python"Invalid"
"Errors: {'code': ['Enter a valid UUID.']}"

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

  • класс Form,
    который является базовым классом для создания форм
  • атрибут cleaned_data,
    который содержит валидированные данные формы
  • метод is_valid,
    который выполняет валидацию полей формы
  • поле CharField,
    которое используется для работы со строковыми данными