2014-06-24 44 views
0

我有一些功能後生成的對象列表,我希望它被保存在Django模型 我試着查詢設置操作如何保存django模型中的對象列表?

mylist = [(u'england', u'1', u'cde', u'IMG1', u'CP1'), (u'england', u'1', u'cde', u'IMG2', u'CP1'), (u'england', u'2', u'abc', u'IMG1', u'CP1')] 

class Mymodel(models.Model): 
    batch_id = models.AutoField(primary_key=True) 
    batch_cola = models.CharField(max_length=100) 
    batch_colb = models.CharField(max_length=100) 
    batch_colc = models.CharField(max_length=100) 
    batch_cold = models.CharField(max_length=100) 
    batch_cole = models.CharField(max_length=100) 
+0

什麼是你想do.please閱讀https://docs.djangoproject.com/en/1.6/intro/tutorial01 /#用-api播放 –

+0

您是否試圖循環訪問列表並使用每個元組內的值創建三個MyModel實例? – dannymilsom

+0

@dannymilsom是的確切 – batman

回答

0

創建模型的新實例都是有據可查 - 見creating objects

但要明確anwser你的問題 - 一個解決方案是遍歷元組的列表,通過適當的關鍵字參數模型類,然後調用save()。最後一位很重要,否則不會有數據庫級別的事務。

for t in mylist: 
    Mymodel(batch_cola=t[0], batch_colb=t[1], 
      batch_colc=t[2], batch_cold=t[3], 
      batch_cole=t[4]).save() 

您也可以使用從型號經理的便利create()功能 - 你不需要調用.save()然後。

for t in mylist: 
    Mymodel.object.create(batch_cola=t[0], batch_colb=t[1], 
      batch_colc=t[2], batch_cold=t[3], batch_cole=t[4]) 

文檔說,這兩個都是equivalent - 因此它有點偏好的問題。

請注意,創建類時應遵循Python中的命名約定 - 「類名稱通常應使用CapWords約定」。 - see PEP-8 guidelines

class MyModel(models.Model): 
    ... 
+0

非常感謝,我用Mymodel.objects.create()它工作的很棒! – batman

+0

很好 - 如果您覺得合適,請隨時接受此答案(請參閱http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) – dannymilsom

0

您可以使用ForeignKey關係有對象的列表「包含」通過父對象。

實施例:

class Parent(models.Model): 
    name = models.TextField() 

class Child(models.Model): 
    name = models.TextField() 
    parent = models.ForeignKey(Parent) 

然後:

p = Parent.objects.create(name="p") 
c = p.child_set.create(name="c") 
c2 = p.child_set.create(name="c2") 

p.child_set.count() # Should be 2 

如需進一步信息請參閱ForeignKey的文檔在Django。

3

可以使用bulk_create方法 - 是這樣的:

Mymodel.objects.bulk_create([Mymodel(**{'batch_cola' : m[0], 
             'batch_colb' : m[1], 
             'batch_colc' : m[2], 
             'batch_cold' : m[3], 
             'batch_cole' : m[4]} 
          for m in mylist]); 
+0

這應該是接受的答案 - 您在單個查詢中創建所有項目,而不是重複訪問數據庫。 –