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
私の見解では、送信されたフォームを保存する前に、送信されたフォームにpkidを追加する必要があります。
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()
このManyToManyFieldに複数のIDを保存するにはどうすればよいですか?
簡単なはずですが、要点が欠けています。
編集:望ましい結果は、すべてのIDがform.person('entry_person'テーブルの複数のレコード)に格納されたMyModelFormの1つの新しいインスタンス('entry'テーブル内)です。
更新: 問題を切り分けたようです。
私が行った場合:
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'],}>
どのように提案はありますか?