когда я пытаюсь загрузить файл, строка form.save (), изображение сохраняется в папке / media, но веб-страница показывает мне ошибку (отношение "project1_document" не существует СТРОКА 1: INSERT INTO "проект1_документ" ("описание", "документ", ...)
мой model_form_upload.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Upload</button>
</form>
<p><a href="{% url 'home' %}">Return to home</a></p>
</body>
</html>
мой models.py
class Document(models.Model):
description = models.CharField(max_length=255, blank=True)
document = models.FileField(upload_to='UserUploads/')
uploaded_at = models.DateTimeField(auto_now_add=True)
мой forms.py
from django import forms
from .models import Document
class DocumentForm(forms.ModelForm):
class Meta:
model = Document
fields = ('description', 'document', )
ошибка возникает, когда я сохраняю свою форму из моего views.py
. Именно в этой строке [forms.save ()] Я получаю сообщение об ошибке [отношение "project1_document" действительно не существует СТРОКА 1: ВСТАВИТЬ В "проект1_документ" ("описание", "документ", ...)] мой views.py
:
from django.shortcuts import render, redirect
from project1.forms import DocumentForm
from .models import Document
from django.http import HttpResponse
from django.core.files.storage import FileSystemStorage
from django.views.generic.edit import FormView
def model_form_upload(request):
if request.method == 'POST':
form = DocumentForm(request.POST, request.FILES)
if form.is_valid():
form.save(); #here
return redirect('home')
else:
form = DocumentForm()
return render(request, 'model_form_upload.html', {
'form': form
})
мой файл миграции 0002_document.py
из django .db миграция импорта, миграция классов моделей (migrations.Migration):
dependencies = [
('project1', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='Document',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('description', models.CharField(blank=True, max_length=255)),
('document', models.FileField(upload_to='UserUploads/')),
('uploaded_at', models.DateTimeField(auto_now_add=True)),
],
),
]
Я не знаю, это правильный способ или нет, но одно решение сработало для меня, перехватив исключение: мой views.py
обновленный
def model_form_upload(request):
if request.method == 'POST':
form = DocumentForm(request.POST, request.FILES)
if form.is_valid():
try:
form.save();
except:
return redirect('home')
else:
form = DocumentForm()
return render(request, 'model_form_upload.html', {
'form': form
})