2013-05-09 4 views
2

Я изучаю Django, и сейчас у меня возникают трудности с Forms. Я хочу создать форму, позволяющую людям оставлять сообщения на странице, которые будут показаны на той же странице (как и система комментариев в блоге). Я создал класс и ModelForm, как это, следуя документацииКак отправить данные в базу данных с помощью Django ModelForm?

class Recado(models.Model): 
    recado = models.TextField() 
    data = models.DateTimeField(auto_now_add=True) 
    nome = models.CharField(max_length=100) 
    email = models.EmailField(max_length=100) 

    def __unicode__(self): 
     return self.recado 

class RecadoForm(ModelForm): 
    class Meta: 
     model = Recado 
     exclude = ('data',) 

Тогда вот мое мнение:

def index(request): 
    RecadoForm = modelform_factory(Recado, exclude=('data')) 
    form = RecadoForm() 
    lista_recados = Recado.objects.order_by('-data') 
    template = loader.get_template('recados/index.html') 
    context = Context({'lista_recados': lista_recados,}) 
    return render_to_response("recados/index.html", { "form": form,}, context_instance=RequestContext(request)) 

И шаблон:

<div class="conteudo-site conteudo-recados"> 
    <form method="post" action="salvar_recado"> 
     {% csrf_token %}    
     {{ form.as_p }} 
     <br /><input class="button" type="submit" value="Deixar Recado" /> 
    </form> 
    {% if lista_recados %} 
     {% for recado in lista_recados %} 
      <p>{{ recado.nome }}</p> 
      <p>{{ recado.data }}</p> 
      <p>{{ recado.recado }}</p> 
      <br /> 
     {% endfor %} 
    {% else %} 
     <p>Ainda não existem recados. Deixe o seu :)</p> 
    {% endif %} 
</div> 

Это создает форму правильно на , но когда я нажимаю кнопку «Отправить», она не сохраняет данные в базе данных, и теперь я не могу понять, что делать. Пробовал некоторые вещи с представлениями, но ничего не получилось.

Может кто-нибудь мне помочь, пожалуйста? Большое спасибо.

+2

Вы читали основной учебник? Это будет полезно также https://docs.djangoproject.com/en/dev/topics/forms/#working-with-forms – Rohan

+2

Нет необходимости использовать modelform_factory - просто импортируйте RecadoForm и используйте это. –

+0

Я прочитал документацию, но я пытался поместить код, который должен обрабатывать данные сообщения в другом представлении (не знаю, почему я это сделал) – fgalvao

ответ

0

Если вы работаете с Django 1.5 попробовать THIS

Может быть, ваш взгляд может быть, что:

class RecadoFormView(FormView): 
    model_class = RecadoForm 
    template_name = 'recados/index.html' 

    def valid_form(self, form): 
     form.instance.save() # Or form.save() 
     return super(RecadoFormView, self).valid_form(form) 
Смежные вопросы