2017-04-08 5 views
-1

Ich versuche auch Informationen zu einem ArrayField speichern, indem Sie append verwenden. Nach dieser post sollte es möglich sein, aber ich kann es nicht zur Arbeit bringen. Im nicht ein neues Objekt erstellen, es existiert schon, ich muss nur zusätzliche Informationen zu dem SnippetSpeichern in Django-Datenbank

-Code ArrayField anhängen:

def isInDatabase(catInfo): 
    cat = catagories.objects 
    catName = str(catInfo) 
    iban = catInfo.getIban() 
    try: 
     cat.get(Naam = catName) 

    except ObjectDoesNotExist: 
     print catName, 'is not in database' 
     # NOTE: create catagory 
     p = cat.create(Naam = catName, Rekening = [iban]) 
     print catName, 'Has been stored in the database with', iban 
    else: 
     ibanList = cat.get(Naam = catName).Rekening 
     editCat = cat.get(Naam = catName) 
     print catName,'is in db, the following ibans are stored:\n\n', ibanList,'\n\n' 
     if iban in ibanList: 
      print iban,'is already in the list\n' 
     else: 
      ibanList.append(iban) 
      editCat.save() 
      print 'Updated list for',catName,'with -->',iban,'\nlist is now -->', ibanList,'\n' 

die editCat.save() der Befehl, das ist Speichern nicht gespeichert wird.

models.py

class catagories(models.Model): 
    Naam = models.CharField(max_length=10) 
    Rekening = ArrayField(models.CharField(max_length = 34), blank = True) 

    def __str__(self): 
     return self.Naam 

Also, welche Änderungen tun müssen, ich es zu bekommen machen, um es in die Datenbank zu speichern. Ich bekomme keinen Fehler, daher läuft das Skript einwandfrei, es wird jedoch nicht in der Datenbank gespeichert.

Antwort

0

Das ist das Problem Code:

ibanList = cat.get(Naam = catName).Rekening 
editCat = cat.get(Naam = catName) 
... 
ibanList.append(iban) 
editCat.save() 

Die editCat unverändert bleibt. Verwenden Sie den Aufruf der Datenbank nur einmal und dann erhalten Sie ibanList von dem Objekt, das Sie bearbeiten möchten.

editCat = cat.get(Naam = catName) 
ibanList = editCat.Rekening 
+0

ah ieee macht Sinn dank! – Kevin

0

Wenn Sie editCat mit editCat = cat.get(Naam = catName) initialisieren, erstellen Sie tatsächlich neuen Variable, die nicht mit ibanList verbunden ist. Was Sie tun müssen, ist den bereits abgerufenen Wert zu ändern. Mögliche Lösung könnte sein

editCat = cat.get(Naam = catName) 
editCat.Rekening.append(iban) 
editCat.save() 

Ein weiteres Problem, das erwähnenswert ist, ist das Vorhandensein von redundanten db-Aufrufe. Jedes Mal, wenn Sie get aufrufen, erstellen Sie tatsächlich eine neue Anforderung für db (um genau zu sein, wenn der Abfragesatz ausgewertet wird). Es wäre besser, den Wert von db nur einmal abzurufen und darüber zu arbeiten.

+0

das ist eigentlich ein guter Rat, danke! – Kevin