DOMANDA Come si chiama una form in django usando il codice?

Pubblicità

fabio_1

Utente Attivo
Messaggi
244
Reazioni
8
Punteggio
43
Ho un problema un pò complicato ma provo a farlo semplice.
Ho una form che vorrei chiamare, modificare, riempire e salvare, il tutto non a mano nel browser ma tramite codice. Non so neanche se sia possibile farlo come voglio io.
Non riesco a trovare spiegato le opzioni che posso usare e la relativa sintassi, mi sarebbe d'aiuto anche solo questo, quindi navigo alla cieca.

Ecco cosa stò facendo.

Chiamo la form vuota:
Python:
form = NameForm()

La modifico creando un'opzione per il campo 'nametype' (non voglio usare javascript per vari motivi). 'nome' è un oggetto che ho creato in precedenza, 'nametype' è un foreignkey che prende oggetti di tipo 'nome'.
Python:
form.fields['nametype'].choices = [(nome.id, nome)]

a questo punto riempio tutti i campi:
Python:
form.fields['name'].initial = 'Remo'
form.fields['nametype'].initial = nome.id

poi me la stampo su schermo per vedere che vada tutto bene (e pare di si, cioè le opzioni scelte sono 'selected', il field 'name' ha value="Remo")
Python:
 print( form)

e infine la salvo
Python:
 form.save()

ma da errore perchè pare vuota.

So che normalmente dovrei dare i valori quando la chiamo tramite initial (o attr, non ho chiara la differenza) però avendo da creare le opzioni per il mio campo 'nametype' ed essendo tutti i campi obbligatori mi da errore se provo a dargli solo alcuni dei valori, per questo prima la chiamo vuota e poi la riempio. Così errore quando la chiamo non lo da, però pare non si riempia realmente, anche se sembra, e da errore al momento di salvarla.

Se voglio agire in questo modo forse un pò strano c'è il suo motivo, quindi magari aiutatemi a fare ciò che ho chiesto (o ditemi che è impossibile farlo) invece che proporre soluzione alternative. Non vi spiego di più per non confondervi le idee e rendere il tutto complicato. Poi se volete ne parliamo, non è un segreto :asd:

Qualcuno sa dirmi se sia possibile fare una cosa del genere, dove sbaglio, dove trovo le opzioni che posso usare quando la chiamo spiegate per bene?

Grazie per il vostro aiuto
--- i due messaggi sono stati uniti ---
Non so perchè ma questo pare funzionare

Python:
def test_form_validation(self):
    maschio = Gender.objects.create(name_en='Male', name_it='Maschio')
    nome = NameType.objects.create(name_en='Name', name_it='Nome')
    romani = NameLanguage.objects.create(
        name_en='Romans', name_it='Romani')
    romani.syntax.add(nome)
    form = NameForm({'nametype': nome.id, 'gender': maschio.id,
                     'name': 'Remo', 'namelanguage': romani.id})
    # print('1', form)
    form.fields['nametype'].initial = nome.id
    print('2', form)
    form.save()
    self.assertEqual(Name.objects.all().count(), 1)
    my_name = Name.objects.first()
    self.assertEqual(my_name.name, 'remo')
    self.assertEqual(my_name.nametype, nome)
    self.assertEqual(my_name.gender, maschio)
    self.assertEqual(my_name.namelanguage, romani)
    print('end of test')

Se qualcuno mi spiega perchè funziona mi fa un piacere
 
Ultima modifica:
Pubblicità
Pubblicità
Indietro
Top