Сохранение изображений в FormWizard Django не работает
Я создал приложение Django, в котором пользователю необходимо заполнить форму для создания нового курса. Я использовал FormWizard для создания многоступенчатой формы. Форма также попросит пользователя загрузить изображение для обложки курса.
Однако, это не работает так, как ожидалось & файл не загружается в файловую систему. Ошибка, которую я получил при сохранении в файловой системе, заключалась в том, что носитель не выбран/не требуется носитель.
Помогите, пожалуйста.
models.py
class Course(models.Model):
CATEGORY = (
('IT & Software', 'IT & Software'),
('Mathematics', 'Mathematics'),
('Science', 'Science'),
('English', 'English'),
('Bahasa Melayu', 'Bahasa Melayu'),
)
LEVEL = (
('Easy', 'Easy'),
('Intermediate', 'Intermediate'),
('Advanced', 'Advanced'),
)
LANGUAGE = (
('English', 'English'),
('Bahasa Malaysia', 'Bahasa Malaysia'),
('Chineese', 'Chineese'),
)
CERTIFICATE = (
('Yes', 'Yes'),
('No', 'No'),
)
media = models.ImageField(upload_to = 'media/course')
title = models.CharField(max_length=30, null = False)
subtitle = models.CharField(max_length=50, null = False)
description = models.CharField(max_length=2000, null = False)
language = models.CharField(max_length=20, null = False, choices=LANGUAGE)
level = models.CharField(max_length=20, null = False, choices=LEVEL)
category = models.CharField(max_length=30, null = False, choices=CATEGORY)
subcategory = models.CharField(max_length=20, null = False)
price = models.IntegerField(null = False)
roles_responsibilities = models.CharField(max_length=250, null = False)
timeline_budget = models.CharField(max_length=250, null = False)
req_prerequisite = models.CharField(max_length=250, null = False)
certificate = models.CharField(max_length=5, null = False, choices=CERTIFICATE)
slug = AutoSlugField(populate_from='title', max_length=500, unique=True, null=True)
def __str__(self):
return self.title
forms.py
class CourseForm1(forms.ModelForm):
class Meta:
model = Course
fields = ['roles_responsibilities','timeline_budget','req_prerequisite','certificate']
class CourseForm2(forms.ModelForm):
class Meta:
model = Course
fields = ['media','title','subtitle','description','language','level','category','subcategory','price']
views.py
class multiplestepformsubmission(SessionWizardView):
template_name = 'courses/create_course.html'
form_list = [CourseForm1, CourseForm2]
file_storage = FileSystemStorage(location=os.path.join(settings.MEDIA_ROOT, 'media'))
def done(self, form_list, **kwargs):
form_data = [form.cleaned_data for form in form_list]
return render(self.request, 'courses/create_course.html', { 'data': form_data})
create_course.html
<div class="card-body">
<p>Step {{ wizard.steps.step1 }} of {{ wizard.steps.count }}</p>
<form action="" method="POST" encytpe="multipart/form-data">{% csrf_token %}
<table>
{{ wizard.management_form }}
{% if wizard.form.forms %}
{{ wizard.form.management_form }}
{% for form in wizard.form.forms %}
{{ form }}
{% endfor %}
{% else %}
{{ wizard.form }}
{% endif %}
</table>
{% if wizard.steps.prev %}
<button name="wizard_goto_step" type="submit" value="{{ wizard.steps.first }}">First Step</button>
<button name="wizard_goto_step" type="submit" value="{{ wizard.steps.prev }}">Previous Step</button>
{% endif %}
<input type="submit" value="submit"/>
</form>
</div>
urls.py
path('createcourse/', views.multiplestepformsubmission.as_view(), name='createcourse'),