2010-10-15 8 views
5

Ho un modulo che invia i seguenti dati:Come aggiornare un'istanza di un modello Django con request.POST se POST è un array nidificato?

question[priority] = "3" 
question[effort] = "5" 
question[question] = "A question" 

Che siano presentati dati che l'URL/domande/1/SAVE in cui 1 è il question.id. Quello che mi piacerebbe fare è ottenere la domanda n. 1 e aggiornarla in base ai dati POST. Ne ho un po 'funzionante, ma non so come spingere il POST nell'istanza.

question = get_object_or_404(Question, pk=id) 
question <<< request.POST['question'] # This obviously doesn't work, but is what I'm trying to achieve. 
question.save() 

Quindi, c'è comunque di spingere la QueryDict nell'istanza del modello e aggiornare tutti i campi con i miei dati del modulo?

Ovviamente, ho potuto eseguire il loop del POST e impostare ogni valore individualmente, ma ciò sembra eccessivamente complesso per un linguaggio così bello.

risposta

20

È possibile utilizzare un ModelForm per ottenere ciò. In primo luogo definire il ModelForm:

from django import forms 

class QuestionForm(forms.ModelForm): 
    class Meta: 
     model = Question 

Quindi, secondo lei:

question = Question.objects.get(pk=id) 
if request.method == 'POST': 
    form = QuestionForm(request.POST, instance=question) 
    form.save() 
+0

Grazie ars, e 'request.POST' è abbastanza intelligente per ignorare l'altra roba lì solo l'aggiornamento del' request.POST [domanda] 'parte di esso? Nello specifico, non voglio pensare che 'utente [email]' abbia qualcosa a che fare con l'oggetto 'Domanda'. –

+0

@Mark: ModelForm confronta i nomi dei campi del modello e dei campi del modulo, quindi li inserisce. Quindi se il modello di domanda e il modulo Web hanno ciascuno un campo chiamato domanda, viene assegnato. Se il tuo modulo ha un campo chiamato email, ma non esiste un campo di questo tipo nel modello Qeustion, non verrà assegnato. Vedere la documentazione collegata per un maggiore controllo su questo, se necessario (ad esempio, è possibile escludere i nomi dei campi). – ars

Problemi correlati