在模型 django 中保存表单

Posted

技术标签:

【中文标题】在模型 django 中保存表单【英文标题】:Save form in model django 【发布时间】:2015-08-27 22:38:06 【问题描述】:

我试图在 Django 上的模型中保存表单的数据,但是当我提交表单并看到 Django 管理页面时,有任何更改。

forms.py:

class PublisherForm(ModelForm):
    class Meta:
        model = Publisher
        fields = ['name','address','city','state_province','country','website']

form = PublisherForm #Creating a form to add a Publisher

这是我的观点.py

def add_publisher(request):
    if request.method == 'POST':
        form = PublisherForm(request.POST)
        if form.is_valid():
            new_publisher=form.save()
            return HttpResponseRedirect('/thanks/')
        else:
            print form.errors
    else:
        form = PublisherForm()
    return render_to_response('add_publisher.html', 'form':form)

还有我的models.py:

class Publisher(models.Model):
    name = models.CharField(max_length = 30)
    address = models.CharField(max_length = 50)
    city = models.CharField(max_length = 60)
    state_province = models.CharField(max_length = 30)
    country = models.CharField(max_length = 50)
    website = models.URLField()

    def __str__(self):
        return self.name

有人可以帮帮我吗?

【问题讨论】:

请编辑您的问题并修正缩进。目前很难说问题出在哪里。在if form.is_valid(): 之后,尝试将print form.errors 放在else 块中——这可能会告诉你问题出在哪里。 @Alasdair 抱歉,我只是更正了缩进。我添加了您向我建议的 else 块,但页面没有返回任何错误。谢谢 我很惊讶您在提交发布请求时没有收到 CSRF 表单。我建议将视图的最后一行更改为return render(request, 'add_publisher.html', 'form':form)(您需要添加导入)。 确保你的表单有method="post"。您可以将您的模板添加到问题中吗? @Alasdair 刚刚解决了我的问题。问题是它没有正确填写表单,因为它在 URLField 字段 () 上输入了一封电子邮件。我不明白,因为我没有在页面上抛出错误。虽然我可以在控制台上看到。感谢您的帮助。 【参考方案1】:

offtopic,但这是使用表单更简单的方式。

def add_publisher(request):
    form = PublisherForm(request.POST or None)

    if request.method == 'POST' and form.is_valid():
        new_publisher = form.save()
        return HttpResponseRedirect('/thanks/')

    return render_to_response('add_publisher.html', 'form':form)

【讨论】:

以上是关于在模型 django 中保存表单的主要内容,如果未能解决你的问题,请参考以下文章

如何在javascript中获取django表单值而不将其保存到模型中

Django With MSSQL using Pyodbc:未保存模型表单

在用户注册之前保存 django 模型表单数据

通过 Django 中的模型表单保存多对多数据

如何从模型中获取一个项目并使用表单 django 将相同的项目保存在另一个模型中

django 中的表单不保存在 Psql 中