Django ModelForm(组件)之save

Django ModelForm(组件)之save,第1张

文章目录
  • 一、ModelForm是什么?
  • 二、使用步骤
    • 1.导入form库
    • 2.定义自己的ModelForm
    • 3.在自己的views.py里面定义自实列自己的ModelForm
    • 4.如何用ModelForm更新字段
    • 5.如何在前端模板中使用
  • 总结

提示:以下是本篇文章正文内容,下面案例可供参考

一、ModelForm是什么?

ModelForm是一个强大的组件,可以在用户输入时做一些校验,也可以在下拉框做出一些提示

二、使用步骤 1.导入form库
from django import forms

2.定义自己的ModelForm
class PrettyModelForm(forms.ModelForm):
    class Meta:
        model = models.PrettyNumber
        fields = ['mobile', 'price', 'level']

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        for name, field in self.fields.items():
            field.widget.attrs = {'class': "form-control"}

__init__是初始化时,可以给输入框添加样式

3.在自己的views.py里面定义自实列自己的ModelForm
def prettyadd(request):
    if request.method == 'GET':
        form = PrettyModelForm()
        return render(request, 'pretty_add.html', {'form': form})
    form = PrettyModelForm(data=request.POST)
    if form.is_valid():
        form.instance.status = 2
        form.save()
    return render(request, 'pretty_add.html', {'form': form})

可以看到如果在定义类的时候,fields字段里面不是model类里面的所有字段,而在保存的时候又想保存一些不用用户自己输入的字段,就可以这样写form.instance.字段名 = ***, 这样就可以不用用户输入,也可以保存。

4.如何用ModelForm更新字段

 代码如下:

def useredit(request, id):
    """ 用户编辑 """
    row_obj = models.UserInfo.objects.filter(pk=id).first()
    if request.method == "GET":
        form = UserModelForm(instance=row_obj)
        return render(request, 'user_edit.html', {'form': form})
    form = UserModelForm(data=request.POST, instance=row_obj)
    if form.is_valid():
        form.save()
        return redirect(reverse('userlist'))
    return render(request, 'user_edit.html', {'form': form})

一样使用save方法,但通过POST传来数据时,需要在实列话时加一个instance=rowobj(数据库要更新的那一行)。

5.如何在前端模板中使用

代码如下:

{% extends 'layout.html' %}


{% block content %}

    
        
            
                 新建用户 
            
            
                
{% csrf_token %} {% for field in form %} {{ field }} {{ field.errors.0 }} {% endfor %}
{% endblock %}

field.label是models的verbose_name, 而field可以自动的生成相应的输入框,而field.error.0是在界面生成相应的报错信息。

6.对输入进行格式匹配

1.字段加正则

from django.core.validators import RegexValidator


class PrettyModelForm(forms.ModelForm):
    mobile = forms.CharField(
        label = '手机号',
        validators=[RegexValidator(r'^\d{11}$', '数字要是手机号')],
    )

    class Meta:
        model = models.PrettyNumber
        fields = ['mobile', 'price', 'level']

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        for name, field in self.fields.items():
            field.widget.attrs = {'class': "form-control"}

2.钩子方法


总结

对ModelForm的相关总结

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/715483.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-25
下一篇 2022-04-25

发表评论

登录后才能评论

评论列表(0条)

保存