我有一个在某些功能之后生成的对象列表,我希望它保存在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 :(得分: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文档。