当我试图上传文件时,在form.save()这一行,图片被保存在media文件夹中,但网页却显示错误(关系 "project1_document "不存在LINE 1: INSERT INTO "project1_document" ("description", "document", ...)
我的 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 "不存在 LINE 1: INSERT INTO "project1_document"("description", "document",...)]我的。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 import migrations, modelsclass Migration(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
})
这个错误通常发生在models.py中的更改尚未反映在数据库中时。
为了应用这些更改,您需要运行以下命令python manage.py makemigrations
和 python manage.py migrate
每当你改变你的模型