[oldboy-django][2深入django]班级管理(Form)--编辑

1.需求:编辑班级,难点:点击编辑按钮后,页面如何显示 待编辑 班级的信息(用Form实现), 以及Url 设置

2 url

url(r'^edit_class/nid=(?P<nid>d+)$', views.edit_class),

3 class_list.html里面设置编辑a标签

<a href="/app01/edit_class/nid={{ item.id }}" class="glyphicon glyphicon-pencil">编辑</a>|
# 注意, href必须和url匹配

 详细如下

 <table class="table table-striped table-bordered table-hover table-condensed">
            <thead>
                <tr>
                    <th>班级ID</th>
                    <th>班级名称</th>
                    <th>操作</th>
                </tr>
            </thead>
            <tbody>
                {% for item in class_list %}
                    <tr>
                        <td>{{ item.id }}</td>
                        <td>{{ item.title }}</td>
                        <td>
                            <a href="/app01/edit_class/nid={{ item.id }}" class="glyphicon glyphicon-pencil">编辑</a>|
                            <a href="/app01/del_class/nid={{ item.id }}" class="glyphicon glyphicon-trash">删除</a>
                        </td>
                        {#点击删除是一个get请求,要想告诉服务器id,可以通过url get请求获取,或者url匹配到传递给视图#}
                    </tr>
                {% endfor %}

            </tbody>
        </table>
View Code

4 视图

def edit_class(request, nid):
    if request.method == "GET":
        current_class = models.Classes.objects.filter(id=nid).first()
        # current_class不能直接传给ClassForm, 必须是字典
        obj = ClassForm(initial={'title': current_class.title})
        # 初始值显示不会验证数据
        # obj = ClassForm(data={'title': current_class.title})
        # 不仅会显示数据,而且会进行数据检验
        return render(request, 'app01_edit_class.html', {'nid':nid, 'obj': obj})

    else:
        obj = ClassForm(data=request.POST)
        if obj.is_valid():
            # 更新数据库数据
            models.Classes.objects.filter(id=nid).update(**obj.cleaned_data)
            return redirect('/app01/classes')
        else:
            return render(request, 'app01_edit_class.html', {'nid':nid, 'obj': obj})
View Code

5 模板

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h4>编辑班级</h4>
<form action="/app01/edit_class/nid={{ nid }}" method="POST">
    {% csrf_token %}
    {{ obj.title }} {{ obj.errors.title.0 }}
    <p><input type="submit" value="提交"></p>
</form>

</body>
</html>
View Code

相关推荐