[ninux-dev] django question

leonardo mail at leonardo.ma
Wed Dec 23 10:10:22 CET 2015


Ciao lista,

volevo fare un aggeggio che monitora la qualita' dei nostri link, fa
qualche stima di dettaglio, aggiunge i tempi di ping che misuriamo con
uno script a parte ecc... mi e' venuto in mente di provare a farlo in
django, anche perche' cosi' se la cosa viene bene posso farne un app
per nodeshot. E' la prima volta che uso django, mi piace ma sono fermo
da due ore su una cosa che sembra banale, magari voi mi date una
dritta. Il codice e' il seguente, prende un netjson della rete e vuole
popolare un mini-db di nodi e link:


def refresh_db(json_url):
      resp = urllib2.urlopen(json_url)
      f = resp.read()
      json_topo = json.loads(f)
      s = Scan()
      s.save()   # <---- save!
      nodes = []
      for node in json_topo['nodes']:
          nodes.append(Node(node_id=node['id'],
                       node_name=node['label'],
                       last_scan=s))
      for n in nodes:
          n.save()  # <----- errore!
^^^^^^^^^^^^^^^^^^

la riga in questione solleva il fatidico errore:
	
save() prohibited to prevent data loss due to unsaved related object
'last_scan'.

che a quanto ho capito succede se uno salva un oggetto con una
relazione ad un altro oggetto, senza salvare il primo. Ora, l'oggetto
scan io lo salvo, e non capisco cosa sto sbagliando. 


ecco models.py:


class Scan(models.Model):
    scan_id = models.IntegerField(primary_key=True)
    scan_time = models.DateTimeField(default=datetime.now)

    def __str__(self):
        return str(self.scan_id) + str(self.scan_time)


class Node(models.Model):
    node_id = models.CharField(max_length=15, primary_key=True)
    node_name = models.CharField(max_length=200)
    last_scan = models.ForeignKey(Scan)
    last_logged = models.DateTimeField(default=datetime.now)

    def __str__(self):
        return self.node_name


ciao,
leonardo.



More information about the ninux-dev mailing list