バルクを追加するためのフォームアセンブリ03フォームセット

データベース:

クラスメニュー(models.Model):
    タイトル = models.CharField(verbose_name = ' メニュー名'、= MAX_LENGTH 32 
    アイコン = models.CharField(verbose_name = ' 图标'、MAX_LENGTH = 32 

    デフ__str __(自己):
        リターン self.title


クラスのパーミッション(models.Model):
     "" "
     权限表
     """
     タイトル= models.CharField(verbose_name = ' 标题'、MAX_LENGTH = 32 
    URL = models.CharField(= verbose_name ' カノニカルURLを含む'、MAX_LENGTH = 128 
    メニュー = models.ForeignKey(verbose_name = ' 所属菜单'ヌル =に、真=空白、真= ' メニュー'、on_delete = models.CASCADE)
    PID = models.ForeignKey(verbose_name = " 关联的权限" =に、' 許可'ヌル = Trueの場合、空白=真、related_name = ' '、on_delete = models.CASCADE)
    名前 = models.CharField(verbose_name = " URL别名"、MAX_LENGTH = 32、ユニーク=真
    デフ__str __(自己):
        リターン self.title

 

フォーム(ChoiceField使用):

ジャンゴインポートフォーム
 から app01.modelsインポート*の
 クラスMultiPermissionForm(forms.Form):
    タイトル = forms.CharField(
        ウィジェット = forms.TextInput(ATTRS = { ' クラス'' フォームコントロール' })
    URL = forms.CharField(
        ウィジェット = forms.TextInput(ATTRS = { ' クラス'' フォームコントロール' })

    名前 = forms.CharField(
        ウィジェット = forms.TextInput(ATTRS = { ' クラス'' フォームコントロール' })
    menu_id = forms.ChoiceField(#########選択肢= [(XXX、XXX)、(XXX、XXX)]各オプションキー値をドロップダウン
        選択肢 = [(なし、' ------------ ' )]、
        ウィジェット = forms.Select(ATTRS = { ' クラス'' フォームコントロール' })、
        必要 = Falseの
    pid_id = forms.ChoiceField(#######選択肢= [(XXX、XXX)、(XXX、XXX)が各オプションキー値をドロップダウン
        選択肢 = [(なし、' ----------- ' )]、
        ウィジェット = forms.Select(ATTRS = { ' クラス'' フォームコントロール' })、
        必要 = Falseの
    __init __ DEF(セルフ、 * argsを、** kwargsから):####プラスオプションがドロップダウンするボックス(データベース)
        スーパー().__のinit __( * argsを、** kwargsから)
        self.fields [ ' menu_id ' ] .choices + = Menu.objects.values_list(' ID '' タイトル' 
        self.fields [ ' pid_id ' ] .choices + = Permission.objects.filter(pid__isnull = TRUE).exclude(
            menu__isnull = 
        ).values_list(' ID '' タイトル'

 

ビュー(form_set使用):

django.shortcutsレンダリングインポート
 からapp01.myforms.customformインポートMultiPermissionForm 
 からdjango.formsインポートformset_factory ########引入模块########
#ここにあなたの意見を作成します。

デフ(リクエスト)multi_add:
    form_class = formset_factory(MultiPermissionForm、余分= 5 )#######用哪个生成形成几个フォーム
   フォームセット= form_class()
の戻りは(要求、レンダリング' multi_add.htmlを')、地元の人々 ()

 

テンプレート:

<!DOCTYPE HTML>
<HTML LANG = " EN " >
<ヘッド>
    <メタ文字セット= " UTF-8 " >
    <タイトル>タイトル</ TITLE>
    <! - ブートストラップコアCSSファイルの最新バージョン - >
<リンクのrel = " スタイルシート"のhref = " https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css "整合性= " SHA3​​84-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va + PmSTsz / K68vbdEjh4u " crossorigin = " 匿名" >
</ head>の
<身体>
<divのクラス = " コンテナ" >
<DIV クラス = " COL-MD-4 COL-MD-オフセット-3 " >
<FORM> 
{ための形態フォームセットの%}
     <時間> 
    {ためのフィールドフォーム%}
        {{}} field.label
        {{}}フィールド
        {%ENDFOR%}
    {%ENDFOR%}
 </フォーム>
</ div>
</ div>
</ BODY>
</ HTML>

 

 

  5

テーブルにデータを送信します:

  -templagets:

<!DOCTYPE HTML> 
<HTML LANG = "EN">
<HEAD>
<メタ文字コード= "UTF-8">
<タイトル>タイトル</ TITLE>
<! -最新版本的ブートストラップ核心CSS文件- >
<リンクrel = "スタイルシート"のhref = "https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css"
整合性= "SHA384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va + PmSTsz / K68vbdEjh4u" crossorigin =」匿名">
</ head>
<body>
<DIV CLASS ="コンテナ">
<DIV CLASS =" COL-MD-オフセット-2 ">
<フォームメソッド=" POST ">
{%csrf_token%}
<TABLE>
<thead要素>
<TR>
<TD>タイトル</ TD>
<TD> URL </ TD>
<TD>名</ TD>
<TD> menu_id </ TD>
<TD> pid_id </ TD>
</ TR>
</ THEAD>
<TBODY>
{フォームセットの%でフォームの%}
<TR>
フィールドの{%フォーム%}で
<TD> {{フィールド}} </ TD>
{%ENDFOR%}
</ TR>
{%ENDFOR%}
</ TBODY>
</ TABLE>
<INPUT TYPE = "提出"値= "提交" >
</ FORM>
</ div>
</ div>
</ body>
</ HTM>

 

 

 

 

  - ビュー:

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                                               

おすすめ

転載: www.cnblogs.com/Jnhnsnow/p/11682109.html