2012-10-13 2 views
0

Je travaille avec un ModelForm et transmets des données qui ont été stockées dans la base de données en utilisant un MultiValueDict qui contient les données d'origine, sous la forme u'first_name': [u'XX'], u'last_name': [u''] et autres, mais le formulaire rend la valeur complètement à le champ réel, y compris [u''] enveloppant le reste.Passage de MultiValueDict à Django ModelForm

Si j'essaie de transmettre le même MultiValueDict à un formulaire normal, je n'obtiens pas ce problème. Je ne sais pas comment gérer le dictionnaire ou traiter les données avant de l'affecter comme valeur initiale.

Edit:

code

qui reçoit les données de la poste et il restaure la forme

if request_post_data is not None: 
    self.form = self.FORM_CLASS(data=request_post_data) 
    self.draft.raw_data = dict(request_post_data) # preserves multiple values per key 
    self.draft.save() 
else: 
# conversion to MultiValueDict restores multiple values per key 
self.form = self.FORM_CLASS(initial=MultiValueDict(self.draft.raw_data) if self.draft.raw_data else None)` 

request_post_data vient d'un champ sérialisé dans la db et une valeur réelle ressemble à ceci:

Qui finit par apparaître dans mes formes comme ceci (quand envoyé à ModelForm):
<MultiValueDict: {u'last_name': [u''], u'suffix': [u''], u'prefix': [u''], u'first_name': [u'XX'], u'middle_name': [u'']}> 

Actual form

Merci pour votre aide!

+0

Veuillez fournir quelques exemples de code. Cela rend beaucoup plus facile de vous aider. –

Répondre

0

Pour instancier une forme avec une instance et la requête fournie POST dict vous pouvez faire ce qui suit à votre avis:

project = get_object_or_404(Project.objects, pk=project_id) 
    projectForm = ProjectForm(request.POST, 
           instance=project) 

Afin de fournir des valeurs initiales, vous devez fournir les valeurs initiales dans un dictionnaire utilisant l'argument de mot clé initial.

projectForm = ProjectForm(initial={'name': 'my first project'})