django - 如果使用 django-import-export 已经存在 id,如何在导入 csv 后更新 django 模型?
问题描述
我正在使用django-import-export模块在我的应用程序中导入 csv。但是我想要的是,如果我再次上传相同的 csv 并更改了一些值,它会更新模型中的现有值,而不是在新行中添加相同的值。这是我的代码:
#resources.py:
class ProductResource(resources.ModelResource):
class Meta:
model = Product
import_id_fields = ('p_id',)
skip_unchanged = True
report_skipped = False
#views.py:
if request.method == 'POST' and request.FILES['myfile']:
product_resource = ProductResource()
dataset = Dataset()
new_product = request.FILES['myfile']
imported_data = dataset.load(new_product.read().decode('utf-8'),format='csv')
result = product_resource.import_data(dataset, dry_run = True)
if not result.has_errors():
product_resource.import_data(dataset, dry_run=False)
#models.py:
class Product(models.Model):
p_id = models.CharField(max_length=20)
name = models.CharField(max_length=20)
quantity = models.IntegerField()
prop1 = models.CharField(max_length=30)
prop2 = models.CharField(max_length=30)
def __str__(self):
return self.p_id
解决方案
您可以使用exclude=('id')
然后从文件中删除 id。
推荐阅读
- vst - 如何获取/设置在 Kontakt VSTi 中加载的乐器?
- android - 如何使用 UPI ID 检查 UPI 支付的状态
- vue.js - Vue.js 环境变量不适用于 Heroku 上的 axios
- asp.net-core - Blazor 路由器,如何在 Net Core 应用程序中拥有多个客户端 Blazor 项目?
- html - 如何显示像 x-editable 这样的输入?
- integromat - Integromat 直接从文本发送图像,无需翻译
- php - Laravel 修改具有过期日期的单元格
- jsp - JSP能否建立一个列表
- excel - 在 Perforce 中,如何安全地获取最新版本的二进制文件(如 Excel 文件),而不覆盖我的本地副本?
- oracle-apex - 在 oracle apex 的另一个字段中输入值时获取 sysdate