如何保存django模型中的对象列表?

时间:2014-06-24 13:45:29

标签: python 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)

3 个答案:

答案 0 :(得分:11)

您可以使用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]);

答案 1 :(得分:3)

创建模型的新实例已有详细记录 - 请参阅creating objects

但是要明确地回答你的问题 - 一个解决方案是循环遍历元组列表,将适当的关键字参数传递给模型类,然后调用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):
    ...

答案 2 :(得分: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

有关详细信息,请参阅Django中的ForeignKey文档。