1

django-forms を使用せずに HTML フォーム フィールドを設定する方法。

4

2 に答える 2

2

を使用したくないdjango.formsが、モデルからデータを取得して html フォームに表示する場合は、次のようにすることができます。

ビュー.py

from django.shortcuts import render_to_response, redirect 
from myApp.models import MyModel

def editForm(request, model_pk):
    model = MyModel.objects.get(pk=model_pk)
    return render_to_response('formUpdate.html',{ 'model' : model })

def updateForm(request, model_pk):
    model = MyModel.objects.get(pk=model_pk)
    model.firstname = request.POST['firstname']
    model.lastname = request.POST['lastname']
    model.save()
    return redirect('home', message='your name has been updated')

テンプレート - formUpdate.html

{% extends "base.html" %}

{% block content %}
<form action="/updateForm/{{ model.id }}/" method="post">
First name: <input type="text" name="firstname" value="{{ model.firstname }}" /><br />
Last name: <input type="text" name="lastname" value="{{ model.lastname }}" /><br />
<input type="submit" value="submit" />
</form>
{% end block %}

models.py

from django.db import models

class MyModel(models.Model):
    firstname = models.CharField(max_length=20)
    lastname = models.CharField(max_length=20)

urls.py

from django.conf.urls.defaults import *

urlpatterns = patterns('',
    (r'^$', 'views.home', name="home"),
    (r'^editForm/(?P<model_pk>\d+)/$', 'views.editForm'),
    (r'^updateForm/(?P<model_pk>\d+)/$', 'views.updateForm'),
)

これは、PHP などでフォームが処理される方法と非常に似ておりmodel、既存の値がレンダリングされるテンプレートに渡されます。モデルのidor pk(主キー) が URL を介してビューに渡され、更新された値が格納ビューに返されてPOSTデータが取得され、更新された値がデータベースに格納されます。

Django の優れた点の 1 つは、開発速度とプラグ可能性のバランスを取る方法です。ほとんどすべてのパーツを交換または変更できます。

そうは言っても、使いたくない理由はありますdjango.formsか?私の理解formでは、上記の例のハードワークのほとんどを実行するだけです。これdjango.formsが目的です。また、OOTB などの Web アプリへの悪意のあるアクセスを防ぐのに役立つ他の機能もあります。それらを取得および更新するための ajax ヘルパー メソッドを作成するのもかなり簡単です。

于 2013-11-10T19:25:39.810 に答える