我有一个名为'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)'函数后保持无。
答案 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()。