zoukankan      html  css  js  c++  java
  • django中的modelform和modelfoemset

    一. ModelForm

      ModelForm是根据Model来定制的Form

    二. ModelForm的创建

    from django import forms
    from app import models
    
    class MyModelForm(forms.ModelForm):
        class Meta:
            model = models.Book
            fields = "__all__"
         labels = {
            "title":"书名",
            "price":"价格"
          }
          widgets{
            "password":forms.widgets.PasswordInput(attt={"class":"form-control"}),
          }

    三. class Meta中常用的参数

      model = models.Book    对应models中的类

      fields = "__all__"       列出所有的字段

      exclude = None         排除的字段

      labels = None        提示信息

      widgets = None       自定义插件

      error_messages = None     自定义错误信息

    四. ModelForm的使用

      1. 创建modelform对象

        form_obj = MyModelForm()          

        form_obj = MyModelForm(instance=obj)    如果需要对form进行有关操作就传进去一个实例对象

      2.  编辑操作

        form_obj = MyModelForm(request.POST,instance=obj)

        form_obj.save()             这样,就会对实例对象进行操作

    五. 对ModelForm显示的字段做出限制

      1. 获取字段和字段对象

        self.fields      获取有序字典,(字段,字段对象)

      2. 对字段显示做出限制

        self.fields["key"].choices      获取可供选择的迭代器列表,重新定义这个值,就可以对字段的显示做出限制

        self.fields["key"].choices=[()]    这个值是列表中放着元组的数据

      3. self.instance的操作

        在实例化modelform对象的时候,instance=obj这个参数传的,这个obj是个类对象

        在modelform中的Meta中,可以使用self.instance对字段的显示进行限制

    六. modelformset的使用

      1. 导入modelformset_factory模块
        rom django.forms import modelformset_factory

      2. 创建一个FormSet类
        FormSet = modelformset_factory(models,form,extra=0) # 第一个参数是表的models,第二个参数是表的forms,extra是额外多几行

      3. 实例化这个类
        formset = FormSet(queryset=需要处理的queryset数据)

      4. html渲染的时候
        1. 给每个form都加上{{ formset.id }}
        2. 在form表单中加{{ formsets.management_form }}
        3. 展示字段
          formset.字段 是带有input框的select
          formset.instance.字段 拿到的是数据源,没有select框

  • 相关阅读:
    Linux 服务器连接远程数据库(Mysql、Pgsql)
    oracle主键自增
    全排列算法实现
    python动态导入包
    python发红包实现
    CentOS 6.8安装Oracle 11 g 解决xhost: unable to open display
    xargs的一个小坑
    利用ssh-copy-id复制公钥到多台服务器
    redhat 5 更换yum源
    【原创】Hadoop的IO模型(数据序列化,文件压缩)
  • 原文地址:https://www.cnblogs.com/q767498226/p/10704706.html
Copyright © 2011-2022 走看看