【问题标题】:Unable to add data to databse from models forms django无法从模型表单 django 将数据添加到数据库
【发布时间】:2020-09-06 16:39:09
【问题描述】:

我正在尝试将数据从 django 表单发送到后端 sqlite3。但我无法这样做。我也没有收到任何帮助我解决问题的错误或警告。

这是models.py文件

from django.db import models
    GENDER_CHOICES = [
    ('Male', 'M'),
    ('Female', 'F')]
class upload(models.Model):
    name = models.CharField(max_length=100)
    gender = models.CharField(max_length=10, choices=GENDER_CHOICES)
    phone = models.CharField(max_length=50,null=True)
    email=  models.EmailField(max_length=50,null=True)
    file=models.FileField(upload_to='uploads/')

    def __str__(self):
        return self.name

这是 forms.py 文件

from django.forms import ModelForm
from .models import upload
class uploadForm(ModelForm):
    class Meta:
        model = upload
        fields = ['name', 'gender', 'phone', 'email','file']

这里是 view.py 文件

from django.shortcuts import render
from .forms import uploadForm
from django.shortcuts import render
def home(request):
    if request.method == 'POST':
        form = uploadForm()
        if form.is_valid():
            form=form.save()
            return HttpResponseRedirect('/')
    else:
        form = uploadForm()

    return render(request,'home.html',{'print':form})

我无法理解问题出在哪里 这就是模板文件的样子

<form  method="post">
    {% csrf_token %}
    {{ print.as_p }}
    <input type="submit" value="Submit">
</form>

编辑 这个问题是FileField,我删除了它,它开始保存在 django 数据库中。我想要的是保存媒体文件夹中的文件和数据库中的其他数据

我还在表单中添加了enctype="multipart/form-data"

【问题讨论】:

  • 是否有异常
  • 不,没有

标签: python django


【解决方案1】:

我认为您实际上并未向数据库发送任何内容。

在哪里说form = uploadForm() 您需要声明您希望发送发布的数据。所以这需要form = uploadForm(request.POST) 我相信它应该可以工作。同样在保存表单时,删除form=form.save() 并将其保留为form.save()

试试看并告诉我们?

【讨论】:

  • 我已经试过了,但是没有用。它继续显示此字段是必需的。 stackoverflow.com/a/5806374/11170350
  • 你是加在“if”语句还是“else”语句中的?编辑:我认为您只需要在 if 部分中使用它
  • 是的,我在 if 语句中添加了它。当我打印 request.POST 时,我什至可以看到输入的值,但我无法保存它们
  • Edit2:表格是否真的显示在管理面板中?
  • 这个问题与FileField有关,我删除了它,它开始保存在 django 数据库中。我想要的是将文件保存在媒体文件夹和数据库中的其他数据
【解决方案2】:

我的帖子的解决方案

为了处理文件,我需要将加密类型添加到我的表单中

enctype="multipart/form-data"

添加后,要访问文件,我应该使用 request.FILESrequest.POST 所以现在我在views.py文件中有这个home函数

def home(request):
    if request.method == 'POST':
        form = uploadForm(request.POST,request.FILES)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/')
    else:
        form = uploadForm()

    return render(request,'home.html',{'print':form})

我的模板表单看起来像

<form action="" method="post" enctype="multipart/form-data"> 
    {% csrf_token %}
    {{ print.as_p }}
    <input type="submit" value="Submit">
</form>

信用:https://youtu.be/Rr1-UTFCuH4?t=244

【讨论】:

    猜你喜欢
    • 2023-03-20
    • 1970-01-01
    • 2020-06-17
    • 1970-01-01
    • 2021-05-26
    • 1970-01-01
    • 2019-06-13
    • 2020-07-12
    • 2021-04-15
    相关资源
    最近更新 更多