обработка форм в django (вопрос для начинающих)

StackOverflow https://stackoverflow.com/questions/1433398

  •  07-07-2019
  •  | 
  •  

Вопрос

Я в первую очередь специалист по 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?Что, куда бы я поместил код?

Мы будем очень признательны за любой ответ.

Это было полезно?

Решение

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

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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top