[ninux-dev] django question

leonardo mail at leonardo.ma
Wed Dec 23 12:05:15 CET 2015


On Wed, 2015-12-23 at 10:56 +0100, Alessandro Bucciarelli wrote:

Ciao Alessandro, e grazie.

> Il secondo save non riesce a reperire l'istanza di Scan salvata fuori
> dal ciclo perché oramai quella è salvata nel db quindi Node che ha la
> Foreign a Scan non sa quale istanza di Scan andare a prendere, in
> particolare l'id.

non capisco bene cosa ho fatto di diverso rispetto agli esempi che ci
sono su django:

https://docs.djangoproject.com/en/1.8/topics/db/examples/many_to_one/

> Prova così dovrebbe essere corretto:
> def refresh_db(json_url):
>    .  resp = urllib2.urlopen(json_url)
>       f = resp.read()
>       json_topo = json.loads(f)
> . . . for node in json_topo['nodes']:
> . . . . . . scan = Scan() 
> . . . . . . node = Node(node_id=node['id'],
> . . . . . . node_name=node['label'],
> last_scan=scan).save(commit=False)
> . . . . .  scan.save() 
> . . . . .  node.save()
> Il commit è una opzione di save particolarmente utile quando devi
> ancora avere a disposizione oggetti che sono ForeignKey, diciamo che
> prepara l'oggetto ma non lo salva. 

TypeError: save() got an unexpected keyword argument 'commit'

da quanto capisco commit e' un'opzione di save() dei model Forms, ma
non dei models.  

qui c'e':
https://docs.djangoproject.com/en/1.8/topics/forms/modelforms/
qui no:
https://docs.djangoproject.com/en/1.8/ref/models/instances/

(sono su django 1.8.7)
in ogni caso, nel tuo codice creo e salvo un'oggetto scan per nodo,
right? mentre io voglio mantere una relazione one-to-many.

> Quindi crei un oggetto Scan, ma non lo salvi, prepari un Node con le
> Info necessarie ma lo salvi con commit False e poi salvi l'oggetto
> più interno e poi quello esterno.
> Scusa l'indent ma da cellulare è un incubo mettere gli spazi.

ma figurati! grazie per il tempo.

l.





More information about the ninux-dev mailing list