django-import-export - Django-import-export:导入 ForeignKey 字段仅对第一个值成功
问题描述
尝试通过 excel 导入数据时,代码仅从数据库中读取第一个条目。
#resource.py
from .models import(
Country, GeoMaster
)
from import_export import resources, fields
from import_export.widgets import ForeignKeyWidget
class CountryResource(resources.ModelResource):
geo_master_id= fields.Field(
column_name= 'geo_master_id',
attribute='geo_master_id',
widget=ForeignKeyWidget(GeoMaster, 'id')
)
class Meta:
model = Country
import_id_fields = ['country_name']
fields = ( 'id', 'country_name', 'geo_master_id')
我的模型GeoMaster
包含多个条目,ID 范围为 1-10
我成功的导入数据集(geo_master_id=1 是数据库中的第一个条目):
id|country_name|geo_master_id
--|--------------|--------------|
|India |1.0 |
不成功的导入数据集(geo_master_id=2 不是数据库中的第一个条目):
id|country_name|geo_master_id
--|--------------|--------------|
|India |2.0 |
错误:GeoMaster 匹配查询不存在。我的#resources.py 有什么问题吗?
更新:我添加了自定义小部件:
class GeoMasterForeignKeyWidget(ForeignKeyWidget):
def get_queryset(self, value, row):
return self.model.objects.filter(
id=row["geo_master_id"],
)
#to be used in subsequent field
geo_master_id= fields.Field(
column_name= 'geo_master_id',
attribute='geo_master_id',
widget=GeoMasterForeignKeyWidget(GeoMaster, 'id')
)```
Still it returns Error: GeoMaster matching query does not exist.
解决方案
我试过这个,它对我有用
class GeoMasterForeignKeyWidget(ForeignKeyWidget):
def get_queryset(self, value, row):
#print(int(value), row)
qs= GeoMaster.objects.filter(
id=int(value),
)
print("returning:", qs)
return qs
推荐阅读
- powershell - 如何压缩太长的文件?
- html - 图像顶部的 Bootstrap 4 浅色叠加以使文本突出/看得更清楚
- vba - 将代码模块从加载项导出到普通模板
- r - 如何在具有多个列表的数据集中准确地省略(负子集)项目?
- c - 怎么处理
- r - 使用带有矩阵的 For 循环优化 R 代码
- bash - Linux 目录权限
- xcode - Cmake 在 Mac OS 10.13 和 Xcode 9.2 上失败(文件是为不受支持的文件格式构建的)
- r - R:将文本值的向量保存到 .txt 文件中(向量的每个元素到单独的 .txt 文件中)
- html - 我的网站不会使用我的自定义表情符号字体(Noto Color Emoji),每个浏览器的行为不同。为什么?