データベース:
クラスメニュー(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 "整合性= " SHA384-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>
- ビュー: