隐藏的验证表格 - Django

时间:2011-12-19 19:15:19

标签: django forms validation imagefield

我很难让这段代码工作。我正在使用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的许多其他问题,但仍然没有得到任何结果。我真的需要一些帮助...

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:3)

您的观看代码并没有多大意义。在检查先前创建的表单是否有效之后,您正在创建表单的新实例,如果不是,则重定向到错误页面。所以,你的代码看起来像我的问题所描述的那样正常工作。

请尝试此视图(假设为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})