我有2个模型:Post
和Date
。 Post
可以有多个Date
,因此我对后者使用了formset。不出所料,提交表单后,我的视图在request.POST
中包含多个Date。
但是,我仍然想根据Date
的值为表单集中的每个表单创建male_total
的多个实例。我尝试使用while循环创建多个Date实例(如下所示),但没有产生我想要的结果。
def create_post(request, method="POST"):
DateFormSet = formset_factory(ExtraDateForm, extra=2, max_num=10, can_delete=True)
if request.method == "GET":
post_form = PostForm(request.GET or None)
formset = DateFormSet(request.GET or None)
elif request.method == "POST":
post_form = PostForm(request.POST)
formset = DateFormSet(request.POST)
if post_form.is_valid() and formset.is_valid():
post = post_form.save()
for form in formset:
male_total = form.cleaned_data['male_number']
x = 0
while x < male_total:
date = form.save(commit=False)
date.post = post
date.sex_of_professional = "Male"
date.save()
x += 1
是由于while循环还是实例化的方式?
答案 0 :(得分:0)
问题出在您的迭代中。当您保存ModelForm
中特定的FormSet
时,您将创建模型的特定实例。换句话说:多次保存同一ModelForm
不会给您多个实例。所以在你的
while x < male_total:
date = form.save(commit=False)
....
您一次又一次地创建相同的Date实例。您需要使用表单中的cleaned_data
来显式创建新实例,例如
while x < male_total:
date = Date(
post = post,
**form.cleaned_data
)
date.save()
(您当然也可以使用** form.cleaned_data而不是** form.cleaned_data来显示字段)
while x < male_total:
date = Date(
post = post,
field1 = form.cleaned_data['field1']
)
date.save()