我刚刚尝试了django-import-export来从csv文件导入一些东西。跟随文档,但在尝试导入以下模型时总是出错:
class Token(models.Model):
key = models.CharField(db_index=True,unique=True,primary_key=True, )
pool = models.ForeignKey(Pool, on_delete=models.CASCADE)
state = models.PositiveSmallIntegerField(default=State.VALID, choices=State.choices)
然后是资源类:
class TokenResource(resources.ModelResource):
class Meta:
model = Token
skip_unchanged = True
report_skipped = True
fields = "key"
现在,当导入csv文件时,我得到以下错误:
Error
row number: 1 - 'id'
Traceback (most recent call last):
File "/backend/.venv/lib/python3.9/site-packages/import_export/resources.py", line 667, in import_row
instance, new = self.get_or_init_instance(instance_loader, row)
File "/backend/.venv/lib/python3.9/site-packages/import_export/resources.py", line 359, in get_or_init_instance
instance = self.get_instance(instance_loader, row)
File "/backend/.venv/lib/python3.9/site-packages/import_export/resources.py", line 346, in get_instance
import_id_fields = [
File "/backend/.venv/lib/python3.9/site-packages/import_export/resources.py", line 347, in <listcomp>
self.fields[f] for f in self.get_import_id_fields()
KeyError: 'id'
在我的模型中没有字段ID,主键字段是键,那么为什么它不被采用?
或者是模型必须有一个id字段才能被导入?我知道这个id是用于比较等,但模型中有一个主键字段,所以我不明白为什么不采取这种方式。
我怎样才能在不重命名我的模型的情况下改变它呢?我在文档中找不到任何提示。
谢谢
2条答案
按热度按时间os8fio9y1#
在我的模型中没有字段ID,主键字段是键,那么为什么它不被采用?
用于标识对象是否存在的默认字段称为“id”。但是,您可以使用
import_id_fields
进行覆盖,因此在您的情况下,以下内容应该可以工作:a5g8bdjr2#
确保使用
import_id_fields=("your_model_primary_key")
设置资源的类 meta:对于django-import-export 2.9.0以上的版本,
resource_class
已经被弃用,而支持resource_classes
,它应该被声明为列表或元组