Скрытая форма проверки - Джанго - PullRequest
0 голосов
/ 19 декабря 2011

Мне очень трудно заставить этот код работать.Я использую 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 ]

3 голосов
/ 19 декабря 2011

Ваш код представления не имеет большого смысла.Вы создаете новый экземпляр формы после проверки правильности ранее созданного экземпляра, а затем перенаправляете на страницу с ошибкой, если это не так.Итак, ваш код выглядит так, как будто он работает, как и ожидалось, как описано в вашем вопросе.

Попробуйте вместо этого использовать это (предполагается 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})
3 голосов
/ 19 декабря 2011

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

Вы должны более внимательно изучить стандартную документацию по , используя форму в представлении - она ​​имеет точный шаблон, которому вы должны следовать.

...