如何在多对多字段中保存用户对象?

时间:2017-01-31 20:25:13

标签: python django django-views

我想在表单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(...)
    ...

此代码是我正在尝试做的一个示例,这是保存后在管理页面中的样子:

enter image description here

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

如果MessageFormModelForm,您必须访问其.instance属性:

save_it.instance.users.add(u)

(而不是上面代码中的save_it.users.add(u)。)

在此行之前,您还需要.save()commit=False,以便允许使用多对多关系。