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