我想在表单ManyToManyField
之后的POST
中保存两个用户对象,如下所示:
ManytoManyField: [<User: user1>, <User: user2>]
这是我尝试保存m2m字段时出现的错误:
ValueError:“......”在使用多对多关系之前,需要为字段“message”设置一个值。
以下是我的代码,模板/ page.html
<form method="POST" action="...to my view...">
{% csrf_token %}
<input name='message'>
<button type="submit">Send</button>
</form>
views.py
if request.method == 'POST':
user1 = ...<User: user1>...
user2 = ...<User: user2>...
two_users = user1, user2
form = MessageForm(request.POST)
if form.is_valid():
save_it = form.save(commit=False)
for u in two_users
save_it.users.add(u)
save_it.save()
return redirect('/')
...
return render(request, "room.html", {...})
models.py:
class Message(models.Model):
users = models.ManyToManyField(User)
message = models.CharField(...)
...
此代码是我正在尝试做的一个示例,这是保存后在管理页面中的样子:
我怎样才能做到这一点?
答案 0 :(得分:0)
如果MessageForm
是ModelForm
,您必须访问其.instance
属性:
save_it.instance.users.add(u)
(而不是上面代码中的save_it.users.add(u)
。)
在此行之前,您还需要.save()
不commit=False
,以便允许使用多对多关系。