class Person(models.Model):
name = models.CharField(max_length=100)
class Entry(models.Model):
text = models.CharField(max_length=100)
person = models.ManyToManyField(Person, blank=True, null=True)
class MyModelForm(forms.ModelForm):
class Meta:
model = Entry
在我看来,我需要在保存之前将 pk id 添加到提交的表单中。
data = request.POST.copy()
# 'person' is a ManyToManyField to a 'Person' model
# a form would normally send multiple id's as POST in this format -> u'id': [u'1', u'2']
# u'1,2' (an example) is a str variable accessible to the view
data[u'person'] = u'1,2'.split(",")
form = MyModelForm(data)
if form.is_valid():
form.save()
这给了我:
int() 参数必须是字符串或数字,而不是“列表”
这很公平。在以下情况下它确实有效:
data[u'person'] = u'1'
我也试过这个没有成功:
new_form = form.save(commit=False)
new_form.person = u'1,2'.split(",")
new_form.save()
form.save_m2m()
如何将多个 id 保存到这个 ManyToManyField?
一定很容易,但我没有抓住重点。
编辑:期望的结果是 MyModelForm 的一个新实例(在“entry”表中),其中所有 id 都存储为 form.person(“entry_person”表中的多个记录)。
更新: 我似乎已经隔离了这个问题。
如果我做:
data = {}
data[u'person'] = u'1,2'.split(",")
它确实有效,结果是:
{u'person': [u'1', u'2'],}
如果我做:
data = request.POST.copy()
data[u'person'] = u'1,2'.split(",")
它不起作用(给出上述错误),因为结果是:
<QueryDict: {u'person': [[u'1', u'2']],}>
所以我只需要拥有
<QueryDict: {u'person': [u'1', u'2'],}>
有什么建议吗?