在Django中,循环表单集(Formsets)是一种处理多个相同表单实例的方式。它们通常用于处理一组相似的表单,例如在创建或编辑多个对象时。初始数据是在创建表单集实例时传递给表单的数据,这些数据将作为表单的默认值。
表单集(Formsets):
formset_factory
和 modelformset_factory
。初始数据(Initial Data):
假设我们有一个简单的模型 Product
,我们希望创建一个表单集来批量编辑这些产品。
from django.db import models
class Product(models.Model):
name = models.CharField(max_length=100)
price = models.DecimalField(max_digits=10, decimal_places=2)
from django import forms
from .models import Product
class ProductForm(forms.ModelForm):
class Meta:
model = Product
fields = ['name', 'price']
from django.shortcuts import render
from django.forms import modelformset_factory
from .models import Product
from .forms import ProductForm
def edit_products(request):
ProductFormSet = modelformset_factory(Product, form=ProductForm, extra=1)
if request.method == 'POST':
formset = ProductFormSet(request.POST, request.FILES, queryset=Product.objects.all())
if formset.is_valid():
formset.save()
else:
initial_data = [{'name': 'Product 1', 'price': 10.0}, {'name': 'Product 2', 'price': 20.0}]
formset = ProductFormSet(queryset=Product.objects.none(), initial=initial_data)
return render(request, 'edit_products.html', {'formset': formset})
<form method="post">
{% csrf_token %}
{{ formset.management_form }}
{% for form in formset %}
{{ form.id }}
{{ form.name }}
{{ form.price }}
{% endfor %}
<button type="submit">Save</button>
</form>
问题:表单集的初始数据没有正确显示。
原因:
解决方法:
例如,如果表单字段名称有变化,需要相应地调整初始数据:
initial_data = [{'name_field': 'Product 1', 'price_field': 10.0}, {'name_field': 'Product 2', 'price_field': 20.0}]
通过这种方式,可以确保表单集的初始数据正确显示,并且用户可以在表单中看到预填充的数据。
领取专属 10元无门槛券
手把手带您无忧上云