添加到 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)