При использовании виджета FileInput и виджета passwordInput в Django modelform данные не отображаются в шаблоне

Мы используем ModelForm, и среди полей есть поля, использующие виджет FileInput и виджет passwordInput.

На странице редактирования данных, которые уже были сохранены, возникла проблема.

Код выглядит следующим образом.

# forms.py

from django.forms import ModelForm
from django.forms.widgets import TextInput, CheckboxInput, FileInput, PasswordInput, 
Select, Textarea
from .models import Testcase

class TestcaseForm(ModelForm):
    class Meta:
        model = Testcase
        fields = ('subject', 'content', 'content_type', 'attached_file', 'attached_file_password', 'request_for_inspection', 'firewall_is_set', 'additional_requests')
        widgets = {
            'subject': TextInput(attrs={
                'id': 'subject',
                'name': 'subject',
                'class': 'form-control mb-3',
                'placeholder': '',
            }),
            'content': Textarea(attrs={
                'id': 'content',
                'name': 'content',
                'class': 'form-control mb-3',
                'draggable': 'false',
                'placeholder': '',
            }),
            'content_type': Select(attrs={
                'id': 'content_type',
                'name': 'content_type',
                'class': 'form-select mb-3',
            }),
            'attached_file': FileInput(attrs={
                'id': 'attached_file',
                'name': 'attached_file',
                'class': 'form-control mb-3',
            }),
            'attached_file_password': PasswordInput(attrs={
                'id': 'attached_file_password',
                'name': 'attached_file_password',
                'class': 'form-control mb-3',
                'placeholder': '', 
            }),
            'request_for_inspection': Select(attrs={
                'id': 'request_for_inspection',
                'name': 'request_for_inspection',
                'class': 'form-select mb-3',
            }),
            'firewall_is_set': CheckboxInput(attrs={
                'id': 'firewall_is_set',
                'name': 'firewall_is_set',
                'class': 'form-check-input ',
            }),
            'additional_requests': Textarea(attrs={
                'id': 'additional_requests',
                'name': 'additional_requests',
                'class': 'form-control mb-3',
                'placeholder': '',
            }),
        }

Это часть файла представления.

# views.py
def TestcaseDetailViewer(request, id):
        testcase = get_object_or_404(Testcase, pk=id)
        if request.method == 'POST':
            form = TestcaseForm(request.POST, request.FILES, instance=testcase)
            if form.is_valid():
                testcase = form.save(commit=False)
                testcase.save()
                return redirect('mailingdata:testcase_detail', id=testcase.id)
        else:
            context = {
                'testcase': testcase,
                'form': TestcaseForm(instance=testcase)
            }
    
            return render(request, 'testcase_detail.html', context)

Шаблон, позволяющий редактировать импортированные данные через значения id, включенные в url.

<!-- detail.html -->
<form method="POST" enctype="multipart/form-data" class="form mb-3">
    {% csrf_token %}
    <div class="card mb-3">
        <div class="card-body">
            <div class="fs-3 card-title">
                <i class="bi bi-envelope"></i>
                Mail content
            </div>
            <p class="card-text form-label">Subject</p>
            {{ form.subject }}
            <p class="card-text form-label">Content</p>
            {{ form.content }}
            <p class="card-text form-label">Content type</p>
            {{ form.content_type }}
            <p class="card-text form-label">Attached file</p>
            {{ form.attached_file }}
            <p class="card-text form-label">Attached file password</p>
            {{ form.attached_file_password }}
        </div>
    </div>

Одна странность заключается в том, что когда рассматриваемый виджет удаляется из формы, поле и данные нормально применяются к шаблону.

enter image description here

enter image description here

Буду признателен, если вы подскажете мне ответ.

Вернуться на верх