ModelForm基本使用

介绍

Django提供的Form和ModelForm两种表单验证方式。相比较Form,ModelForm可以直接与与数据库表相关联,不需要像Form那样需要手动逐一字段添加表单验证的字段。且可以随意选择需要验证的表单字段。

ModelForm使用方法

新建ModelForm

其中:

model 是需要操作的数据库表;

fields是需要验证的字段,如果需要数据库表所有字段可以使用fields="__all__"

widgets是插件,设置字段的输入方式及设置使用bootstrap时所需要的样式(有更好的实现方式);

# rbac/forms/role.py
from django import forms
from rbac import models

class RoleModelForm(forms.ModelForm):
    """
    角色操作表单
    """
    class Meta:
        model = models.Role
        fields = ["title", ]
        widgets = {
            "title": forms.TextInput(attrs={"class": "form-control"})
        }

视图函数中使用ModelForm

视图函数中实例化RoleModelForm()对象并使用,

增加

选择要验证的数据:form = RoleModelForm(data=request.POST)

验证表单数据:form.is_valid()

保存数据: form.save()

def role_add(request):
 
    if request.method == "GET":
        form = RoleModelForm()
        return render(request, "rbac/change.html", {"form": form})
    form = RoleModelForm(data=request.POST)
    if form.is_valid():
        form.save()
        return redirect(reverse("rbac:role_list"))
    return render(request, "rbac/change.html", {"form": form})
编辑

编辑时默认显示初始值:form = RoleModelForm(instance=role_obj)

选择要验证并编辑的数据:form = RoleModelForm(instance=role_obj, data=request.POST)

def role_edit(request, pk):
    role_obj = models.Role.objects.filter(pk=pk).first()
    if not role_obj:
        return HttpResponse("要修改的数据不存在,请重新选择")
    if request.method == "GET":
        form = RoleModelForm(instance=role_obj)
        return render(request, "rbac/change.html", {"form": form})
    form = RoleModelForm(instance=role_obj, data=request.POST)
    if form.is_valid():
        form.save()
        return redirect(reverse("rbac:role_list"))
    return render(request, "rbac/change.html", {"form": form})
上一篇:在运行时设置Django ModelForm可见字段?


下一篇:[20140422]使用dgmgrl管理dataguard(11)