2011-12-19 4 views
0

У меня очень тяжелое время, пытаясь заставить этот код работать. Я использую Python 2.7 и Django 1.3Скрытая форма проверки - Django

Когда я пытаюсь отправить форму, она приводит меня на страницу с ошибкой, например, у формы что-то не так.

У меня есть класс модели с полем изображения:

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> 

Возможно, ошибка перед моим носом, но я работал над этим около трех дней и не имел r esult. Я прочитал документацию Django и многие другие вопросы в StackOverflow, но ничего не получил. Мне действительно нужна помощь ...

ответ

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}) 
+0

Большое спасибо! Я работаю весь день с VBScript (QlikView), а иногда отступы и структура кода Python для меня кажутся мне сложными. Теперь он отлично работает: D –

+1

Добро пожаловать. Рад, что смог помочь. Надеюсь, вам понравится Python намного больше, чем VBScript! – Brandon

+0

Вы ставите, что я :) –

3

Ваш взгляд очень странный. Если это сообщение, вы создаете форму, используя данные сообщения. Затем вы проверяете, что это действительно: тогда вы повторно введите форму без данных и проверьте, недействительно! Конечно, в этот момент он никогда не будет действительным, потому что второй экземпляр не имеет данных. Поэтому, естественно, он всегда перенаправляется - но опять же, поскольку вы перенаправляетесь на другое представление, вы никогда не увидите фактические сообщения об ошибках, сгенерированные формой.

Вы должны более внимательно изучить стандартную документацию на using a form in a view - она ​​имеет точный шаблон, за которым вы должны следовать.

+0

Я посмотрел туда, как и в миллион раз, и не мог применить его к ситуации, у меня был. Как я уже говорил, ошибка была у моего носа, и я не мог ее увидеть. Большое спасибо за ваш ответ, это тоже помогло :) –

Смежные вопросы