Django Import-Export一对一字段导入报错:KeyError: 'id'
Django-import-export导入数据触发KeyError: 'id'问题
使用版本
- Python 3.10.4
- Django 4.0.6
- Django-import-export 2.8.0
问题描述
向Django应用导入演示数据时,持续出现KeyError: 'id'错误,多种数据格式(如yaml)均触发该问题。
相关代码
models.py
class Reservation(models.Model): reservation = models.OneToOneField(Vehicle, on_delete=models.CASCADE, primary_key=True,) delivered = models.BooleanField('Delivered', default=False) date_reserved = models.DateTimeField('date reserved', default=datetime.datetime.now) ...
admin.py
class ReservationResource(resources.ModelResource): class Meta: model = Reservation exclude = ('id',) import_id_fields = ('reservation',) fields = ( 'reservation', 'delivered', 'date_reserved', ... ) class ReservationImportExport(ImportExportModelAdmin): resource_class: ReservationResource @admin.register(Reservation) class ReservationAdmin(SimpleHistoryAdmin, ReservationImportExport): fields = ["delivered", "date_reserved", ...]
demo-reservations.yaml
- reservation: 50001 delivered: False date_reserved: 7/15/2022T00:00:00+00:00 ...
报错信息
Traceback (most recent call last): File "c:\Users\...\lib\site-packages\import_export\resources.py", line 661, in import_row instance, new = self.get_or_init_instance(instance_loader, row) File "c:\Users\...\lib\site-packages\import_export\resources.py", line 353, in get_or_init_instance instance = self.get_instance(instance_loader, row) File "c:\Users\...\lib\site-packages\import_export\resources.py", line 340, in get_instance import_id_fields = [ File "c:\Users\...\lib\site-packages\import_export\resources.py", line 341, in <listcomp> self.fields[f] for f in self.get_import_id_fields() KeyError: 'id'
已尝试的解决措施
- 移除Admin注册中的
SimpleHistoryAdmin - 调试发现代码未正确加载
import_id_fields配置,手动修改参数后可继续执行 - 将模型中的
OneToOneField替换为ForeignKey
后续排查
查阅官方文档及社区资料,按说明配置exclude和import_id_fields应该能解决该问题,但实际测试后问题依旧。目前怀疑是django-import-export包的bug,已提交相关问题反馈。
内容的提问来源于stack exchange,提问作者JoeF
相关产品推荐
相关产品推荐

