[ninux-dev] django question

Alessandro Bucciarelli bucciarelli.alessandro at gmail.com
Wed Dec 23 10:56:32 CET 2015


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.

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.
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.

Let us know.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://ml.ninux.org/pipermail/ninux-dev/attachments/20151223/fac4f3ad/attachment-0001.html>


More information about the ninux-dev mailing list