首页 > 解决方案 > Django objects.get_or_create():从字典或列表传递参数

问题描述

我目前有一个 django 管理命令来导入 CSV 文件,它基于这个答案。主要业务是由下面一行循环完成的:

created = Customer.objects.get_or_create(account_no = int(row[0]), name = row[1])

但是,因为我有许多不同的模型可以运行它,所以我希望将上面的代码放在一个函数中,并从字典中传递属性和行键;所以我会定义类似的东西:

csv_columns = { 0: 'account_no', 1: 'name' }

但是我不知道如何get_or_create基于此运行该功能。我相信这应该很简单。

标签: pythondjango

解决方案


首先,你的字典应该是这样的:

csv_row = {"account_no": "123-456", "name": "v25"}

确保使用 aDictReader以便读取 csv 文件的标题,然后正确迭代 csv 文件的行,即产生的每个 dict 的键是列名。

然后,get_or_create调用将是一个简单的解包,如下所示:

Customer.objects.get_or_create(**csv_row)

推荐阅读