2011-01-20 13 views
7

Sto provando a precompilare un campo modulo con i dati di un oggetto Db. Come si imposta il modulo, la vista e il modello per riempire un campo con questi dati?Fill Dati del campo modulo Django con dati Db

L'obiettivo è consentire all'utente di selezionare solo i dati interrogati dall'oggetto. Ex. Un evento prevede la riproduzione di bande, l'utente seleziona la propria band preferita da quelle dell'evento.

Ho provato a cercare tra i documenti per form.data, ma non riesco a trovare quello che sto cercando.

Grazie!

risposta

4

Supponendo vostro modello Eventi ha fasce come molti-2-Many chiave, la disposizione delle forme e punti di vista sarebbe la seguente:

forms.py:

class EditEventForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(EditEventForm, self).__init__(*args, **kwargs) 
     self.fields['bands'].queryset= \ 
         Bands.objects.filter(Q(name='band1')|Q(name='band2')) 
    class Meta: 
     model = Event 

NOTA: si avrebbe bisogno per regolare il recupero del queryset nei moduli per le tue esigenze.

views.py:

form = EditEventForm(instance=event) 

Inoltre, in linea con la suggestione data dal dcrodjer, andare avanti e leggere un testo per l'attuazione ModelMultipleChoiceField

1

È possibile ottenere un po 'più personalizzato passando argomenti per il Modulo

class SelectBandForm(forms.Form): 
def __init__(self, event, *args, **kwargs): 
    super(EditEventForm, self).__init__(*args, **kwargs) 
    self.fields['bands'] = forms.ModelChoiceField(label="Whats your favorite band?", 
       empty_label="Select a Band" , querset=Bands.objects.filter(event=event)) 

Poi, nel vostro punto di vista

if request.method =="POST": 
    form = SelectBandForm(event, request.POST) 
    if form.is_valid(): 
     #do stuff 
else: 
    form = SelectBandForm(event) 
    #show it 
Problemi correlati