如何通过关系将复选框值保存到 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 中使用复选框小部件从 MultipleChoiceField 保存数据
如何保存具有关系的modelSerializer? - django