Django表单不保存

问题描述 投票:0回答:1

当我试图上传文件时,在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
    })
django django-models django-rest-framework django-forms django-views
1个回答
0
投票

这个错误通常发生在models.py中的更改尚未反映在数据库中时。

为了应用这些更改,您需要运行以下命令python manage.py makemigrationspython manage.py migrate 每当你改变你的模型

© www.soinside.com 2019 - 2024. All rights reserved.