Django框架中如何使用ModelForm 用户验证+数据库操作

鳄鱼君Ba

发表文章数:518

Vieu四代商业主题

高扩展、安全、稳定、响应式布局多功能模板。

¥69 现在购买
首页 » Python教程 » Django框架中如何使用ModelForm 用户验证+数据库操作

modelform就是model和form的结合体,使用它可以让基本的增删改查非常简单。如果使用它的话,程序的耦合度会增强,过度依赖model中的类。对于小程序我们可以使用,如果小程序会变成大程序就不建议使用。

ModelForm既可以帮我们做验证,也可以进行数据库操作,现在通过一个实例来进行说明。在models.py中创建两张表,UserInfo(用户信息表,关联UserCity)和UserCity(用户城市表):

from django.db import models

class UserCity(models.Model):
    city=models.CharField(max_length=32)


class UserInfo(models.Model):
    username=models.CharField(max_length=32)
    email=models.EmailField()
    user_city=models.ForeignKey(to='UserCity',to_field='id',on_delete=models.CASCADE)

在关联UserCity的时候需要设置on_delete,否则会报错。现在我们先按照前面的思路,让用户访问http://127.0.0.1:8000/index/,就会显示两张表,需要在视图views.py中添加代码:

from django.shortcuts import render
from django.forms import Form
from django.forms import fields
from myapp1 import models
class UserForm(Form):
    username = fields.CharField(max_length=32)
    email = fields.EmailField()
    user_city = fields.ChoiceField(
        choices=models.UserCity.objects.values_list('id','city')
    )
    def __init__(self,*args,**kwargs):
        super(UserForm,self).__init__(*args,**kwargs)
        self.fields['user_city'].choices=models.UserCity.objects.values_list('id','city')

def index(request):
    if request.method=="GET":
        obj=UserForm()
        return render(request,'index.html',{'obj':obj})
    elif request.method=="POST":
        obj = UserForm(request.POST)
        val=obj.is_valid()
        if val:
            models.UserInfo.objects.create(**obj.cleaned_data) #创建
            #models.UserInfo.objects.filter(id=1).update(**obj.cleaned_data) #更新
        return render(request, 'index.html', {'obj': obj})

index.html
<form action="/index/" method="post">
    {% csrf_token %}
    <table>
        {{ obj.as_table }}

    </table>
    <input type="submit" value="提交">
</form>

以上是基于form实现的添加更新操作,这里不详细说明,现在我们再来看一下modelform的实现:

from django.shortcuts import render

from myapp1 import models



from django.forms import ModelForm
class UserModelForm(ModelForm):
    class Meta:
        model=models.UserInfo  #定位到models的UserInfo类中的字段
        fields='__all__' #所有的字段
        # fields=['username','email'] #显示当前的字段
        # exclude=['username'] #排除的字段


def index(request):
    if request.method=="GET":
        obj=UserModelForm()
        return render(request,'index.html',{'obj':obj})
    elif request.method=="POST":
        obj =UserModelForm(request.POST)
        print(obj.is_valid())  #ModelForm中同样有下面的方法
        print(obj.changed_data)
        print(obj.errors)
        return render(request, 'index.html', {'obj': obj})

我们还是定义一个类,类继承的是ModelForm,ModelForm在内部各Form继承的都是同一个类,所有,自爱ModelForm中也存在is_valid()方法、changed_data、errors。我们现在可以再models中定义我们需要显示的字段,当然也可以在Meta中定义,详情参考:Django之ModelForm组件的配置

未经允许不得转载:作者:鳄鱼君Ba, 转载或复制请以 超链接形式 并注明出处 鳄鱼君Ba
原文地址:《Django框架中如何使用ModelForm 用户验证+数据库操作》 发布于2020-04-27

分享到:
赞(1) 赏杯咖啡

评论 抢沙发

9 + 6 =


文章对你有帮助可赏作者一杯咖啡

支付宝扫一扫打赏

微信扫一扫打赏

Vieu4.6主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。
切换注册

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录
切换登录

注册