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() argument must be a string or a number, not 'list'
を。私もノー成功でこれを試してみました
data[u'person'] = u'1'
:
がどのように私はこれのManyToManyFieldに複数のIDを保存することができますそれはの場合に動作しますか?
簡単にする必要がありますが、私はポイントを逃しています。
EDIT: 所望の結果がform.personために保存されているすべてのIDのと(「エントリ」テーブル内)MyModelFormの新しいインスタンスである(「entry_person」テーブル内の複数のレコード)。
UPDATE: 私は、問題を分離しているように見えます。
私が行う場合:
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'],}>
任意の提案を持っているのですか?
[u'1', u'2']
は、データベース内の複数のインスタンスを作成するには、リストを反復処理する必要があるでしょう::への好奇心のうち
for x in u'1,2'.split(","):
data[u'person'] = x
form = MyModelForm(data)
if form.is_valid():
form.save()
、なぜ文字列
に回答
あなたはモデルのコードを投稿して形成することができますか? –
ありがとう!これは変だけど、私は問題の原因を見つけたと思う。 – dmi