обработка форм в Django (вопрос для начинающих) - PullRequest
0 голосов
/ 16 сентября 2009

Я в первую очередь парень из 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);
}

Как бы я это сделал в Джанго? Что бы я положил код?

Любой ответ будет принята с благодарностью.

1 Ответ

4 голосов
/ 16 сентября 2009

Если вам действительно нужно много нестандартных вещей, ознакомьтесь с ModelForms , но Generic Views достаточно для очень многих случаев использования.

P.S. Если вы действительно делаете Comment связанные вещи, проверьте предоставленное Comments приложение в django.contrib.comments.

ОБНОВЛЕНИЕ: вместо определения ваших представлений и форм, как у вас выше, используйте 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...