Django формы не сохраняются - PullRequest
0 голосов
/ 09 мая 2020

когда я пытаюсь загрузить файл, строка 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
    })

1 Ответ

0 голосов
/ 09 мая 2020

Эта ошибка обычно возникает, когда есть изменения в models.py, еще не отраженные в базе данных.

Чтобы применить эти изменения, вам необходимо запускать python manage.py makemigrations и python manage.py migrate каждый раз, когда вы меняете свои модели

...