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()
Как сохранить несколько идентификаторов в этом ManyToManyField?
Должно быть легко, но я упускаю суть.
EDIT:
Желаемый результат - один новый экземпляр MyModelForm (в таблице 'entry') со всеми идентификаторами, сохраненными для form.person (несколько записей в таблице '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'],}>
Есть предложения как?