0

我很难让这段代码正常工作。我正在使用 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 的许多其他问题,但仍然一无所获。我真的需要一些帮助...

4

2 回答 2

3

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

您应该更仔细地查看有关在视图中使用表单的标准文档- 它具有您应该遵循的确切模式。

于 2011-12-19T19:47:06.587 回答
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})
于 2011-12-19T19:47:44.457 回答