将对象添加到ManyToMany字段

时间:2017-03-08 08:56:47

标签: django

我有一个名为'Line'的模型,它与'User'有一个ManyToMany关系。 我要做的是渲染不包括用户字段的行的形式,以便为ManyToMany字段创建costum呈现,用户可以在所有用户中搜索,然后他检查用户名称旁边的复选框。 然后我读取所选用户的ID并从数据库中获取用户并尝试设置新行对象的用户。

以下是代码:

型号:

class Line(models.Model):
    name = models.CharField("Name", max_length=50)
    owners = models.ManyToManyField(User, related_name="line_owners")

    def set_owners(self, users):
        self.owners.clear()
        for user in users:
            self.owners.add(user)
        self.save()

形式:

class LineCreationForm(forms.ModelForm):
    class Meta:
        model = Line
        exclude = 'owners'

    def __init__(self, *args, **kwargs):

        super(LineCreationForm, self).__init__(*args, **kwargs)

        for filed in self.visible_fields():
            filed.field.widget.attrs['class'] = 'form-control'

查看:

def new_line(request):     
    if request.method == POST:
    form = LineCreationForm(request.POST)

        if form.is_valid():
            line = form.save()
            if 'line_owner' in request.POST:
                owners_ids = get_integers_from_checked_checkboxes(request, 'line_owner')
                selected_users = User.objects.filter(pk__in=owners_ids)
                line.set_owners(selected_users)

        return redirect(home_page)

问题:

我测试了用户列表,它运行正常。问题是所有者列表在调用'line.set_owners(selected_users)'函数后保持无。

2 个答案:

答案 0 :(得分:1)

你可以做到

line.owners.add(*selected_users)

答案 1 :(得分:0)

http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#the-save-method

使用commit = False时,必须调用save_m2m()。