使用变量作为参数调用Model.add()

时间:2016-01-25 14:14:57

标签: python django django-models orm

我尝试使用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并不喜欢。

我该如何处理?

1 个答案:

答案 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了解更多详情。