动态添加字段到表单 python django

Dynamically add field to a form python django

我想要一个 Django 表单,用户可以在其中添加多个 stop_name、stop_longitude、stop_latitude 使用 在里面添加更多按钮。假设用户有 3 个 stop_name,因此他必须点击 添加更多 两次。并且每次添加更多以上字段时都会再次填充。 我是 Django 的新手,所以我需要一些帮助。

这是我的模型

class SupplyChainStops(models.Model):
    ingredient = models.ForeignKey(Ingredients, null=True, on_delete=models.CASCADE)
    stop_name = ArrayField(models.CharField(max_length=1024, null=True, blank=True))
    stop_longitude = ArrayField(models.CharField(max_length=500, null=True, blank=True))
    stop_latitude = ArrayField(models.CharField(max_length=500, null=True, blank=True))

Okey 使用 formset factory 我非常直接和简单地呈现多个字段供用户填写他们的信息。首先,您需要在项目中创建 forms.py,然后在表单中导入 django 的 formset_factory。我们会这样做:

from django.forms import formset_factory
from .models import SupplyChainStops

# Here we are creating a formset to handle the maniplations of our form to
# have extra field by using the extra parameter to formset_factory
# and also we can add a delete function to allow users to be able to delete 

Formset = formset_factory(SupplyChainStops, fields=[' stop_name',' stop_longitude','stop_latitude'], extra=4, can_delete=True)
# I have set the formset to give us an extra field of four and enable users 
# to delete 

现在我们要处理视图来处理我们的表单集。

from django.views.generic.edit import FormView
from .forms import Formset

class formsetView( FormView):
      template_name = 'formset.html'
      form_class = Formset
      success_url = '/'
      
      

在我们的模板中,我们将做这样的事情。


<form method="post">{% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Add">
</form>

在函数基础视图中执行此操作

from .forms import Formset

def formset_view(request):
    if request.method == 'POST':
       formset = Formset(request.POST,)
       if formset.is_valid():
          formset.save()
    else:
          formset = ()
    return render (request, 'formset.html',{'formset':formset})

在您的 HTML 模板中

<form method="post">{% csrf_token %}
    {{ formset.as_p }}
    <input type="submit" value="Add">
</form>