Форма Django для загрузки файлов недействительна
У меня есть модель Django следующего содержания
class NewFile(models.Model):
name = models.CharField(max_length=200)
phone = models.CharField(max_length=200)
address = models.CharField(max_length=1000)
csv_file = models.FileField(upload_to ='retailer_uploads/')
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return self.name
А форма Django выглядит следующим образом
class NewFileForm(forms.ModelForm):
class Meta:
model = NewFile
fields = ('name', 'phone', 'address', 'csv_file')
Это мои представления Django
def handle_new_file(request):
if (request.method == 'POST'):
form = NewFileForm(request.POST, request.FILES)
if form.is_valid():
form.save()
csv_file = request.FILES['csv_file']
fs = FileSystemStorage()
csv_file_name = fs.save(csv_file.name, csv_file)
csv_file_url = fs.url(csv_file_name)
return redirect('home')
И, наконец, мой шаблон
<form action="{% url 'handle_new_file' %}" method='post' enctype="multipart/form-data" id='new_form'>
{% csrf_token %}
<div class="row">
<div class="col-md-6">
{{ new_file_form.name|as_crispy_field }}
</div>
<div class="col-md-6">
{{ new_file_form.phone|as_crispy_field }}
</div>
</div>
{{ new_file_form.address|as_crispy_field }}
{{ new_file_form.ean_mapping|as_crispy_field }}
{{ new_file_form.retailer_file|as_crispy_field }}
<div class="d-grid gap-2">
<button class="btn btn-primary" type="submit">Submit</button>
</div>
</form>
Во-первых, проблема, с которой я столкнулся, заключается в том, что по какой-то причине эта форма не действительна, так как она не сохраняется. Не уверен почему.
Но я хочу сделать следующее: после сохранения формы я хочу открыть файл csv из папки media и получить имена столбцов из этого файла. Для этого у меня есть вспомогательная функция. Проблема в том, что я не могу получить доступ к файлу, так как он не сохраняется.
Я не уверен, что я делаю неправильно.