如何通过关系将复选框值保存到 django 中的 ManyToManyField?

Posted

技术标签:

【中文标题】如何通过关系将复选框值保存到 django 中的 ManyToManyField?【英文标题】:How to save a checkboxed values to ManyToManyField in django with a through relationship? 【发布时间】:2017-10-08 15:44:19 【问题描述】:

我目前正在处理一个相当简单的 django 项目,可以使用一些帮助。目前我坚持使用复选框保存表单。

我有以下具有多对多和直通关系的模型:

class ProfileMatch(models.Model):
     user = models.OneToOneField(settings.AUTH_USER_MODEL,unique=True)
     profiles = models.ManyToManyField(UserProfile,blank=True)

def __unicode__(self):
    return "Profile id: %s" %(self.user.id)

我为此创建了一个带有复选框的 html 表单。选定的 profile_id 应该与关联的 user_id 一起保存

<form action="." method="POST" class="post-form">% csrf_token %
                                <thead>
                                    <th>Select</th>
                                    <th>Profile-ID</th>
                                </thead>

                                <tbody>
                                     % for user in userprofiles %
                                   <tr>
                                        <label class="checkbox">
                                                <input type="checkbox" name="user" data-toggle="checkbox" value=" user.pk ">
                                        </label>
                                        <td> user.profile_id </td>
                                    </tr>
                                % endfor %    

                                </tbody>
                            </table>
                             <button type="submit" class="save btn btn-default">Add Selected </button>
                            </form>

以及保存表单的简单视图:

def PremuiumUserProfileSelectList(request, pk):
    match = ProfileMatch.objects.get(pk=pk)


     if request.method == 'POST':
        if request.POST.getlist("user", None):
           checked = request.POST.getlist("user", None)
           premium_user = User.objects.get(pk=pk)
           m = match(user=premium_user, profiles=checked)
           m.save()

       else:
          return render(request, "premiumuser/selected_list.html", context)
    else:
         return render(request, "premiumuser/selected_list.html", context)

这不会保存表单。表单字段已呈现并且所有选定的profiles_id 都显示在列表中。如何保存此表单?我想将所有选定的复选框值保存在关联用户中。如何保存?

【问题讨论】:

【参考方案1】:

假设 checked 是 id 列表,您只需这样做。

match.profiles.add(*checked)

【讨论】:

如果 ProfileMatch 匹配查询不存在,我将如何创建匹配对象? ProfileMatch.objects.create(user=user).然后添加manytomany字段,因为在添加相关对象之前必须先创建对象。

以上是关于如何通过关系将复选框值保存到 django 中的 ManyToManyField?的主要内容,如果未能解决你的问题,请参考以下文章

如何将多选框的值发送到 django 后端

如何在 django 中处理未保存的多对多关系?

如何在 Django 中使用复选框小部件从 MultipleChoiceField 保存数据

如何保存具有关系的modelSerializer? - django

如何将复选框导出到 OpenOffice 中的 .doc 文档?

单击按钮时如何将多个复选框值保存到 Firebase