添加到 formset 中的 M2M
Add to M2M in formset
我正在尝试添加到表单集中提交的 M2M 字段。添加的记录未被添加。这是views.py
if family_member_formset.is_valid():
for form in family_member_formset:
fmform = form.save(commit=False)
# This query should return a list of "email lists" that should be
# added to the form before it is submitted.
matches = fmform.email_list.get_admin()
for ae in matches:
fmform.email_list.add(ae)
fmform.save()
form.save_m2m()
get_admin()查询returns如下:
>>> matches
[<EmailList: Knee-mail>, <EmailList: Student Council>, <EmailList: Co-o>,<EmailList: High School>, <EmailList: General Homeschool Info>]
我认为发生的事情应该是这样的:
- get_admin() 检索该用户保存在数据库中的记录。
- 然后将这些记录添加到提交的表格中。
- 保存表格时,M2M 代码会删除所有这些记录。
- 然后 M2M 代码添加此表单中包含的所有 M2M 记录。
- 因为我在保存之前将 get_admin() 的记录添加到表单中,所以这些记录应该添加到数据库中。
我发现这些记录没有被保存。所有被保存的是用户在提交表单之前所做的选择。
已解决。
if family_member_formset.is_valid():
for form in family_member_formset:
fmform = form.save(commit=False)
matches = fmform.email_list.get_admin().all()
# Not sure if I need this but it ensures that
# the database records are actually retrieved before
# the records are deleted in the save_m2m call
elist=[]
for e in matches:
elist.append(e)
fmform.save()
form.save_m2m()
# Add entries AFTER the M2M records are saved
for ae in elist:
fmform.email_list.add(ae)
我正在尝试添加到表单集中提交的 M2M 字段。添加的记录未被添加。这是views.py
if family_member_formset.is_valid():
for form in family_member_formset:
fmform = form.save(commit=False)
# This query should return a list of "email lists" that should be
# added to the form before it is submitted.
matches = fmform.email_list.get_admin()
for ae in matches:
fmform.email_list.add(ae)
fmform.save()
form.save_m2m()
get_admin()查询returns如下:
>>> matches
[<EmailList: Knee-mail>, <EmailList: Student Council>, <EmailList: Co-o>,<EmailList: High School>, <EmailList: General Homeschool Info>]
我认为发生的事情应该是这样的: - get_admin() 检索该用户保存在数据库中的记录。 - 然后将这些记录添加到提交的表格中。 - 保存表格时,M2M 代码会删除所有这些记录。 - 然后 M2M 代码添加此表单中包含的所有 M2M 记录。 - 因为我在保存之前将 get_admin() 的记录添加到表单中,所以这些记录应该添加到数据库中。
我发现这些记录没有被保存。所有被保存的是用户在提交表单之前所做的选择。
已解决。
if family_member_formset.is_valid():
for form in family_member_formset:
fmform = form.save(commit=False)
matches = fmform.email_list.get_admin().all()
# Not sure if I need this but it ensures that
# the database records are actually retrieved before
# the records are deleted in the save_m2m call
elist=[]
for e in matches:
elist.append(e)
fmform.save()
form.save_m2m()
# Add entries AFTER the M2M records are saved
for ae in elist:
fmform.email_list.add(ae)