2017-04-06 4 views
0

Ich habe eine Liste von Listen. Ich möchte ein Model mit diesen Daten füllen.Füllen Sie ein Django-Modell aus der Liste der Listen

my_list = [['January', 'February', 'March'], [10, 20, 30], [2, 4, 6]] 

The Model I's like to build is: 

MyModel(models.Model): 
    month = models.Charfield(maxlength=12) # This is my_list[0] 
    sales = models.DecimalField() # This is my_list[1] 
    expenses = models.DecimalField() # This is my_list[2] 

Bitte entschuldigen Sie alle Tippfehler. Ich tippte das aus dem Gedächtnis. Ich suche nach dem allgemeinen Prinzip, wie man ein Modell aus einer Liste von Listen erzeugt. Ich möchte es vermeiden, Listen in einem einzelnen Datenbankeintrag zu speichern (indem ich JSON usw. verwende), und stattdessen möchte jeder Datenbankeintrag einen einzigen Wert haben. Mit anderen Worten, meine Monatszeile würde eine eigene Spalte für Januar, Februar und März haben.

Danke in advnace!

Antwort

3

Sie können zip und bulk_create für die Erstellung aller Datensätze verwenden Sie eine Abfrage mit:

objects = [] 
for month, sales, expenses in zip(*my_list): 
    objects.append(MyModel(
     month=month, 
     sales=sales, 
     expenses=expenses 
    )) 
MyModel.objects.bulk_create(objects) 
+0

Danke für die Hilfe. Schnelle Frage, geht diese for-Schleife nach den Felddefinitionen in das Modell selbst? Würde es in eine Funktion gehen, die dann aufgerufen wird? Die Verwendung von zip und bulk_create ist sehr sauber, aber ich bin mir nicht sicher, wie ich es implementieren soll. – Dan

+1

Von Docs für bulk_create: Die save() -Methode des Modells wird nicht aufgerufen, und die Signale pre_save und post_save werden nicht gesendet. Wenn Sie also eine benutzerdefinierte Methode zum Speichern haben, können Sie Modelle in for-Schleife erstellen und in for-Schleife speichern. Aber es wird langsamer als bulk_create arbeiten, da es die Datenbank für jedes neue Modell trifft. –