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

ClearableFileInput

Виджет ClearableFileInput применяется к полю FileField или ImageField в формах Django и предоставляет интерфейс для загрузки файлов с дополнительной опцией удаления уже загруженного файла. Виджет отображает текущее значение поля (ссылку на файл), а также чекбокс "Clear", позволяющий пользователю удалить существующий файл при отправке формы. Виджет автоматически генерирует HTML-разметку с полями для загрузки нового файла, ссылкой на текущий файл и флажком для его очистки.

Синтаксис

from django import forms from django.forms.widgets import ClearableFileInput # Использование в классе формы class MyForm(forms.Form): file_field = forms.FileField( label="Загрузите файл", widget=ClearableFileInput() ) # Использование с атрибутами class MyFormWithAttrs(forms.Form): file_field = forms.FileField( label="Загрузите файл", widget=ClearableFileInput(attrs={ 'class': 'my-file-input', 'accept': '.pdf,.doc,.docx' }) )

Параметры

Виджет ClearableFileInput не имеет обязательных параметров, однако принимает стандартные аргументы для всех виджетов:

  • attrs - словарь с HTML-атрибутами для поля ввода, например, 'class', 'accept', 'id'

Пример . С формой ModelForm

Рассмотрим пример использования виджета с моделью, содержащей поле для изображения:

from django.db import models from django import forms from django.forms.widgets import ClearableFileInput # Определяем модель class Profile(models.Model): name = models.CharField(max_length=100) avatar = models.ImageField(upload_to='avatars/') created_at = models.DateTimeField(auto_now_add=True) # Создаем форму на основе модели class ProfileForm(forms.ModelForm): class Meta: model = Profile fields = ['name', 'avatar'] widgets = { 'avatar': ClearableFileInput(attrs={ 'class': 'avatar-upload', 'accept': 'image/*' }) }

Пример . Рендеринг виджета

При рендеринге виджет генерирует следующий HTML-код для существующего файла:

<div> Сейчас: <a href="/media/avatars/user_avatar.jpg">user_avatar.jpg</a> <br> Изменить: <input type="file" name="avatar" accept="image/*" class="avatar-upload"> <br> <label> <input type="checkbox" name="avatar-clear"> Очистить </label> </div>

Пример . Обработка данных формы

В контроллере формы необходимо учитывать, что при установке флажка очистки значение поля будет удалено:

from django.shortcuts import render from .forms import ProfileForm from .models import Profile def edit_profile(request, profile_id): profile = Profile.objects.get(id=profile_id) if request.method == 'POST': form = ProfileForm(request.POST, request.FILES, instance=profile) if form.is_valid(): # При очистке файла поле станет пустым form.save() return render(request, 'success.html', {'form': form}) else: form = ProfileForm(instance=profile) return render(request, 'edit_profile.html', {'form': form})

Пример . Настройка пустого значения

Виджет позволяет настроить отображение, когда файл отсутствует, через атрибут initial_text:

from django import forms from django.forms.widgets import ClearableFileInput class DocumentForm(forms.Form): document = forms.FileField( label="Документ", widget=ClearableFileInput( attrs={'class': 'document-upload'}, ) ) # Использование с начальным значением form = DocumentForm(initial={ 'document': 'existing_document.pdf' })

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

  • виджет FileInput,
    базовый виджет для загрузки файлов
  • виджет TextInput,
    стандартное текстовое поле ввода
  • класс FileField,
    поле формы для загрузки файлов
  • класс ImageField,
    поле формы для загрузки изображений
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить