我尝试使用django ORM导入一些数据。所以,我已经构建了一个可能会从Excel工作表中填充的脚本。
然后,通过python控制台,我正在做:execfile('import.py')
。
我的import.py中会有类似的内容:
from catalog.models import (User, Product, Project)
PROJECT_FILLER_USER_ID = 1
PROJECT_TITLE = "Some Title"
PROJECT_DESCRIPTION = "Some description"
IS_PROJECT_ACTIVE = True
f = User.objects.get(id=PROJECT_FILLER_USER_ID)
p = Project.objects.create(filler=f, title=PROJECT_TITLE, description=PROJECT_DESCRIPTION, active=IS_PROJECT_ACTIVE)
PROJECT_PRODUCTS_LIST = "1, 2, 3, 8"
# Lists are filled with id with ',' as separator
p.products.add(PROJECT_PRODUCTS_LIST)
基本上,我希望它可以做一些事情,比如创建项目,然后从其他模型中添加内容。
例如,在创建项目之后,会发生类似这样的事情:p.products.add(1, 2, 3, 8)
。但是当我将id列表作为字符串传递时,看起来Django并不喜欢。
我该如何处理?
答案 0 :(得分:2)
您需要先创建一个列表,"1, 2, 3 ,8"
是一个不是列表的字符串,因此它不能正常工作,您需要[1, 2, 3, 8]
。
其次,对于M2M
字段,当您有一个ID列表时,需要像这样调用add
:
project_list = [1, 2, 3, 8]
p.prodeucts.add(*project_list)
这里的明星是解包参数列表的python方式。一个*
将用于list / tuple参数,而**
将用于字典。查看PEP448 doc了解更多详情。