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
À mon avis, j'ai besoin d'ajouter des identifiants pk à un formulaire soumis avant de l'enregistrer.Ajout de données au champ plusieurs-à-plusieurs d'un modèle dans une vue
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()
Cela me donne:
int() argument must be a string or a number, not 'list'
qui est assez juste. Il fonctionne en cas de:
data[u'person'] = u'1'
J'ai aussi essayé cela sans succès:
Comment puis-je enregistrer plusieurs id à cette ManyToManyField?
Doit être facile mais je manque le point.
EDIT: Le résultat souhaité est une nouvelle instance de MyModelForm (dans le tableau 'd'entrée') avec tous les identifiants stockés pour form.person (plusieurs enregistrements dans la table 'entry_person').
MISE À JOUR: Il me semble avoir isolé le problème.
Si je fais:
data = {}
data[u'person'] = u'1,2'.split(",")
Il ne travail que le résultat est:
{u'person': [u'1', u'2'],}
Si je fais:
data = request.POST.copy()
data[u'person'] = u'1,2'.split(",")
Il ne fonctionne pas (donne l'erreur décrite ci-dessus) car le résultat est :
<QueryDict: {u'person': [[u'1', u'2']],}>
Tout ce que je besoin est d'avoir
<QueryDict: {u'person': [u'1', u'2'],}>
Toute suggestion comment?
Pouvez-vous poster le code pour le modèle et la forme? –
Merci! C'est bizarre mais je pense que j'ai trouvé ce qui cause le problème. – dmi