РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
423 of 818 menu

Поле JSONField

Поле JSONField в формах Django предназначено для работы с данными в формате JSON. Оно автоматически преобразует входные строки JSON в структуры Python (словари и списки) и обратно, а также выполняет валидацию корректности JSON. Поле принимает следующие параметры: required - указывает, обязательно ли поле для заполнения, initial - задает начальное значение, label - определяет метку поля, help_text - выводит подсказку, а также error_messages - позволяет переопределить стандартные сообщения об ошибках.

Синтаксис

from django import forms class MyForm(forms.Form): json_data = forms.JSONField(**options)

Пример

Создадим простую форму с JSON полем и выведем её в шаблоне:

from django import forms class SettingsForm(forms.Form): name = forms.CharField(max_length=100) preferences = forms.JSONField( label="User preferences", help_text="Enter JSON object with user settings", initial={"theme": "light", "language": "en"} )

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

<form method="post"> <label for="id_name">Name:</label> <input type="text" name="name" maxlength="100" id="id_name"> <label for="id_preferences">User preferences:</label> <textarea name="preferences" id="id_preferences"> {"theme": "light", "language": "en"} </textarea> <span class="helptext">Enter JSON object with user settings</span> </form>

Пример

Создадим форму для обработки JSON данных в контроллере:

from django import forms from django.shortcuts import render from django.http import JsonResponse class ProductForm(forms.Form): name = forms.CharField(max_length=200) attributes = forms.JSONField( label="Product attributes", help_text='Example: {"color": "red", "size": "M"}' ) def product_create(request): if request.method == 'POST': form = ProductForm(request.POST) if form.is_valid(): attributes = form.cleaned_data['attributes'] # attributes is Python dict: {"color": "red", "size": "M"} return JsonResponse({ "status": "success", "attributes": attributes }) else: form = ProductForm() return render(request, 'product_form.html', {'form': form})

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

"status": "success", "attributes": {"color": "red", "size": "M"}

Пример

Валидация JSON данных с автоматическим преобразованием в структуры Python:

from django import forms class UserProfileForm(forms.Form): username = forms.CharField(max_length=50) meta = forms.JSONField( required=False, initial={}, error_messages={ 'invalid': 'Please enter a valid JSON object' } ) # Usage example: form = UserProfileForm({ 'username': 'john_doe', 'meta': '{"age": 30, "city": "New York"}' }) if form.is_valid(): meta_data = form.cleaned_data['meta'] # meta_data is Python dict: {"age": 30, "city": "New York"}

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

"Form is valid" "meta_data: {'age': 30, 'city': 'New York'}"

Пример

Обработка ошибок при невалидном JSON:

from django import forms class ConfigForm(forms.Form): settings = forms.JSONField(label="Configuration") # Submit invalid JSON form = ConfigForm({ 'settings': '{"key": value}' # Missing quotes around value }) if not form.is_valid(): errors = form.errors['settings'] print(errors)

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

"['Enter a valid JSON.']"

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

  • поле CharField,
    которое используется для строковых данных
  • поле ModelChoiceField,
    которое предоставляет выбор из модели
  • метод is_valid,
    который выполняет валидацию формы
  • атрибут cleaned_data,
    который содержит валидированные данные
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить