Django - 添加字段以动态形成

Posted

技术标签:

【中文标题】Django - 添加字段以动态形成【英文标题】:Django - Add field to form dynamically 【发布时间】:2015-11-18 14:03:39 【问题描述】:

目标: 通过按下按钮将字段动态添加到表单。提交后,将所有字段中的值存储在一个列表中。

(我已经查看了有关 Stack Overflow 的其他问题,并试图找到一个基本教程/说明如何做到这一点:dynamically add field to a form)

我不确定我需要查找/研究什么。我知道它会涉及 javascript,但它是 Django 方面,我不确定它是如何工作的。

我为初学者创建了一个基本表单:

Models.py

from django.db import models

class SimpleForm(models.Model):
    basic_field = models.CharField(max_length=200)

Forms.py

from django import forms
from models import SimpleForm

class SimpleForm(forms.ModelForm):

class Meta:
    model = SimpleForm
    fields = ['basic_field']

Views.py

from django.shortcuts import render
from forms import SimpleForm

def index(request):
    if request.method == "POST":
        # For loop to iterate over dynamically created fields
        # Store values in list
    else:
        form = SimpleForm()
    return render(request, "index.html", 'form':form)

Index.html

% block content %
    <h1>Simple Form</h1>
    <form method="POST" class="post-form">% csrf_token %
         form.as_p 
        <button type="button" class="btn-default">Add Another Field</button>
        <button type="submit" class="btn-default">Submit</button>
    </form>
% endblock %

【问题讨论】:

使用 jQuery 或 javascript 将字段添加到表单中(您可以给它们一个通用的类名)。单击提交时,在您自己的事件处理程序中捕获事件,阻止默认操作并将所有字段的值转换为列表或 JSON 对象。将此传递到您的服务器,其他一切照常进行! 这是大神亲自解答的问题***.com/questions/2942359/… 【参考方案1】:

尝试使用django-formsets。你可以从这个整洁的tutorial开始。

基本上,您需要做的是从您的views.py 中的表单创建一个表单集。

    from django.forms.formsets import formset_factory
    CompoundFormset = formset_factory(SimpleForm,max_num=10,extra=1)

【讨论】:

以上是关于Django - 添加字段以动态形成的主要内容,如果未能解决你的问题,请参考以下文章

在django中动态地向表中添加字段

如何动态添加“隐藏”字段来形成?

django - 动态添加 django 表单字段并保留用户输入

向 Django 模型添加动态字段

使用 django 动态添加输入字段并将数据保存到数据库

在管理员中向 Django 的 export_as_csv 操作添加动态字段