【问题标题】:Hidden validation form - Django隐藏的验证表单 - Django
【发布时间】:2011-12-19 19:15:19
【问题描述】:

我很难让这段代码正常工作。我正在使用 Python 2.7 和 Django 1.3

当我尝试提交表单时,它会将我带到错误页面,就像表单有问题一样。

我有一个带有图像字段的模型类:

class Livro (models.Model):
    Titulo = models.CharField(max_length=200)
    Autor = models.CharField(max_length=200)
    Genero = models.CharField(max_length=100)
    Editora = models.CharField(max_length=200)
    Capa = models.ImageField(upload_to='media', blank=True, null=True)
    ISBN = models.CharField(max_length=200)
    Serie = models.CharField(max_length=200)
    Data = models.DateField()
    Tipocapa = models.CharField(max_length=100)
    Lingua = models.ForeignKey(PropObra,'Lingua', related_name="lingualivro")

    def __unicode__(self):
        return self.Titulo

这是我实现的视图:

def salvalivro(request):
    if request.method == 'POST': 
        form = LivroForm(request.POST, request.FILES)
    if form.is_valid():
        form = LivroForm()
        if not form.is_valid(): 
            return HttpResponseRedirect('/erro/')
    return render_to_response('salvalivro.html', {'form': form,}, context_instance=RequestContext(request))

这是我在模板中的代码:

<form enctype="multipart/form-data" method="POST" action="/salvalivro/" >{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Salvar" />
</form>

也许错误就在我眼前,但我已经为此工作了大约三天,但没有任何结果。我已经阅读了 Django 的文档以及有关 StackOverflow 的许多其他问题,但仍然一无所获。我真的需要一些帮助...

【问题讨论】:

    标签: django forms validation imagefield


    【解决方案1】:

    您的视图代码没有多大意义。在检查先前创建的表单是否有效后,您正在创建表单的新实例,如果不是,则重定向到错误页面。因此,您的代码在我看来就像您的问题中描述的那样按预期工作。

    试试这个视图(假设 Django 1.3):

    def salvalivro(request):
        form = LivroForm(request.POST or None, request.FILES or None)
        if request.method == 'POST':
            if form.is_valid():
                form.save() #or whatever else you need
        return render(request, 'salvalivro.html', {'form': form})
    

    【讨论】:

    • 非常感谢!我整天都在使用 VBScript (QlikView),有时 Python 缩进和代码结构对我来说有点棘手。现在它工作得很好:D
    • 不客气。很高兴我能帮上忙。我希望你比 VBScript 更喜欢 Python!
    【解决方案2】:

    你的观点很奇怪。如果是帖子,则使用帖子数据实例化表单。然后,您检查它是否有效:然后您重新实例化没有数据的表单并检查它是否无效!当然,此时它永远不会有效,因为第二个实例化没有数据。因此,很自然,它总是会重定向 - 但同样,因为您要重定向到不同的视图,所以您永远不会看到表单生成的实际错误消息。

    您应该更仔细地查看using a form in a view 上的标准文档 - 它具有您应该遵循的确切模式。

    【讨论】:

    • 我看了一百万次,无法将其应用于我所遇到的情况。就像我之前说的,错误就在我眼前,我看不到它。非常感谢您的回答,它也有帮助:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-28
    • 1970-01-01
    • 1970-01-01
    • 2014-07-15
    • 2017-06-17
    • 2013-10-07
    相关资源
    最近更新 更多