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 %}

模型.py

from django.db import models

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

网址.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 的优点之一是它如何平衡开发速度和可插入性——几乎它的任何部分都可以替换或更改。

说了这么多,有不想用的理由django.forms吗?据我了解,aform只是为您完成了上面示例中的大部分艰苦工作,这就是django.forms目的。它们还具有其他功能,可帮助防止恶意访问您的 Web 应用程序,例如 OOTB。创建 ajax 辅助方法来检索和更新它们也相当容易。

于 2013-11-10T19:25:39.810 回答
0

您可以像在 html 中创建普通表单一样执行此操作。只是要小心放置{% csrf_token %}。和表单nameinput的 ,因为它们将在视图中使用。

例如:

<form method="post" action="#the url for the view">
{% csrf_token %}
...
...
<!-- fields that you want Eg: -->
<label for="username">User name:</label>
<input type="text" name="username" id="username" />
...
...
<input type="submit" value="Submit" />
</form>

希望这有帮助。

于 2013-11-10T18:47:21.110 回答