首页 > 解决方案 > 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.

标签: django-import-export

解决方案


我试过这个,它对我有用

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

推荐阅读