• ModelForm和ModelFormSet的用法


    ModelForm的用法:

     1 class GoodsModelForm(forms.ModelForm):
     2     """
     3     ModelForm
     4     """
     5     class Meta:
     6         model=models.Goods
     7         fields="__all__"
     8         # 错误消息
     9         error_messages={
    10             'name':{'required':'不能为空'}
    11         }
    12         # 插件
    13         widgets={
    14             'source':forms.RadioSelect()
    15         }
    16     
    17     # 定义class属性
    18     def __init__(self,*args,**kwargs):
    19         super().__init__(*args,**kwargs)
    20         for name,filed in self.fields.items():
    21             if name=='source':
    22                 # 根据打印数据额类型找到源码去掉--------------
    23                 from django.forms.models import ModelChoiceField
    24                 filed.empty_label=None
    25             else:
    26                 filed.widget.attrs['class']='form-control

    ModelFormSet的用法:

     1 def mult_add(request):
     2     """
     3     批量添加
     4     :param request:
     5     :return:
     6     """
     7     from  django.forms.models import modelformset_factory
     8     GoodsModelFormSet=modelformset_factory(model=models.Goods,form=GoodsModelForm,extra=3)
     9     if request.method=='GET':
    10         form_set=GoodsModelFormSet()
    11         return render(request, 'mult_add.html', {'form_set': form_set})
    12     form_set=GoodsModelFormSet(data=request.POST)
    13     if form_set.is_valid():
    14         form_set.save()
    15         return  redirect('/index/')
    16     return render(request,'mult_add.html')
    ModelFormSet

    添加后端代码:

     1 def add(request):
     2     """
     3     添加
     4     :param request:
     5     :return:
     6     """
     7     if request.method=="GET":
     8         form=GoodsModelForm()
     9         return  render(request,'add.html',{'form':form})
    10     form=GoodsModelForm(data=request.POST)
    11     print(form)
    12     if form.is_valid():
    13         form.save()
    14         return redirect('/index/')
    15     return render(request, 'add.html', {'form': form})
    add

    添加前端代码:

     1 <link rel="stylesheet" href="https://cdn.bootcss.com/twitter-bootstrap/4.1.3/css/bootstrap.css">
     2 <div class="container">
     3     <h1>批量增加商品</h1>
     4     <form method="post">
     5         {% csrf_token %}
     6         {{ form_set.management_form }}
     7         <table class="table table-bordered table-hover">
     8             <thead>
     9             <tr>
    10                 <th>商品名称</th>
    11                 <th>价格</th>
    12                 <th>来源</th>
    13                 <th>分类</th>
    14                 <th>库房</th>
    15             </tr>
    16             </thead>
    17             <tbody>
    18             {% for form in form_set %}
    19                 <tr>
    20                     {% for field in form %}
    21                     <td>{{ field}} {{ field.errors.0}}</td>
    22                     {% endfor %}
    23                 </tr>
    24             {% endfor %}
    25             </tbody>
    26         </table>
    27         <input type="submit" value="提交">
    28     </form>
    29 </div>
    add

    修改后端代码:

     1 def update(request,nid):
     2     """
     3     修改
     4     :param request:
     5     :param nid:
     6     :return:
     7     """
     8     obj=models.Goods.objects.filter(id=nid).first()
     9     if request.method=="GET":
    10         form=GoodsModelForm(instance=obj)
    11         return  render(request,'update.html',{'form':form})
    12     form=GoodsModelForm(data=request.POST,instance=obj)
    13     if form.is_valid():
    14         form.save()
    15         return redirect('/index/')
    16     return render(request, 'update.html', {'form': form})
    update

     修改前端代码:

     1 <div class="container">
     2     <h1>添加商品</h1>
     3     <form class="form-horizontal" method="post" novalidate>
     4         {% csrf_token %}
     5         {% for field in form %}
     6             <div class="form-group">
     7                 <label class="col-sm-2 control-label">{{ field.label }}</label>
     8                 <div class="col-sm-10">
     9                     {{ field }} <span style="color: red;">{{ field.errors.0 }}</span>
    10                 </div>
    11             </div>
    12         {% endfor %}
    13 
    14         <div class="form-group">
    15             <div class="col-sm-offset-2 col-sm-10">
    16                 <input type="submit" class="btn btn-success" value="提 交">
    17             </div>
    18         </div>
    19     </form>
    20 
    21 </div>
    update
  • 相关阅读:
    给右键 添加dos命令
    js模拟系统无刷新跳回登录页1
    MBProgressHUD.h file not found
    建立个人博客网站
    <转>提高iOS开发效率的方法和工具
    设置模块功能设计思路及代码实现
    经验之谈
    'NSInteger' (aka 'long') to 'int32
    OCR技术
    升级Xcode6.4插件失效解决办法
  • 原文地址:https://www.cnblogs.com/duanhaoxin/p/9918083.html
Copyright © 2020-2023  润新知