处理django中的表格(初学者问题)

时间:2009-09-16 14:38:42

标签: django django-forms

我主要是一个PHP人。我如何处理django中的表单?我设法创建了一个表单,模型和视图。现在我想将我的数据保存到数据库中。

#forms.py
from django import forms
import datetime

class CommentForm(forms.Form):
    name = forms.CharField(initial='Your name')
    comment = forms.CharField(initial='You comment')
    commend_date = forms.DateField(initial=datetime.date.today);
    posted_by = forms.CharField(max_length=200)

我的观点是这样的:

#views.py
from django.shortcuts import render_to_response
from django.http import Http404
from django.template import Template, Context
from mysite.blog.models import Blog         #load a model
from mysite.blog.forms import CommentForm   #load a form


def index(request):
    try:
        blog_posts = Blog.objects.all().order_by('-post_date')[:10]

        if request.method == 'POST':
            form = CommentForm(request.POST)
        else:
            form = CommentForm()

    except Blog.DoesNotExist:
        raise Http404

    return render_to_response('blog/posts.html', locals())

然后我的模板( blog / posts.html )就像这样:

{% extends "base.html" %}
{% block title %}Dummy Django Site{% endblock %}
{% block heading %}A sample header{% endblock %}
{% block content %}

    {% if blog_posts %}
        {% for post in blog_posts %}
        <b>{{post.title}}</b><br/>
        <b>{{post.post_date}}</b><br/>
        <b>{{post.posted_by}}</b><br/>
        {{post.content}}
        {% endfor %}
    {% endif %}

    <h2>A Sample Form</h2>
    <form action="" method="POST">
        {% for field in form %}
            <div class="fieldWrapper">
                {{ field.errors }}
                {{ field.label_tag }}: {{ field }}
            </div>
        {% endfor %}
        <p><input type="submit" value="Send message" /></p>
    </form>

{% endblock %}

{% block footer %}
<hr/>
Great footer!
{% endblock %}

在PHP中,我会在控制器中添加一些内容,如:

//from <form action="http://mysite.com/saveComment" method="POST" >
function saveComment() {
    $data['name'] = $_POST['name'];
    $data['comment'] = $_POST['comment'];
    $model->save($name);
}

我如何在Django中这样做?我在哪里放置代码?

非常感谢任何回复。

1 个答案:

答案 0 :(得分:4)

如果您确实需要大量自定义内容,请查看ModelForms,但Generic Views足以应对大量用例。

P.S。如果你真的在做Comment相关内容,请查看django.contrib.comments中的provided Comments app

更新:不要像上面那样定义您的观看次数和表单,而是使用ModelForm。这将允许使用如下代码进行保存:

# Save a new Comment object from the form's data.
>>> new_comment = my_comment_form.save()

forms.py的更改会将CommentForm的定义更改为:

from django.forms import ModelForm

class CommentForm(ModelForm):
    class Meta:
        model = Comment  # Assumes you've imported your model somewhere

更新2:一般情况下:

  • 保存模型实例,只需调用.save()
  • 要从表单访问POST数据,请使用您从cleaned_data
  • 构建的Form POST属性