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

fabio_1

Utente Attivo
231
8
CPU
i5-6500
Scheda Madre
ASRock H170 Pro4S
HDD
Samsung 870QVO 1TB, Samsung 850EVO 250GB, HD Toshiba 2TB
RAM
Corsair DD4 2133 C13 2x4GB
GPU
Sapphire R9 380 4GB NITRO
Audio
Integrata + DAC Audioengine D1
Monitor
LG 24MB56HQ-B IPS
PSU
XFX 550 Black
Case
Corsair Spec-03
Periferiche
Casse Edifier R1800TIII
OS
Windows 10
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
Post unito automaticamente:

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:

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!