【问题标题】:Django-import-export: Importing ForeignKey fields succeeds only for 1st ValueDjango-import-export:导入 ForeignKey 字段仅对第一个值成功
【发布时间】:2019-10-09 09:36:51
【问题描述】:

当尝试通过 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


    【解决方案1】:

    我试过了,它对我有用

    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
    

    【讨论】:

      猜你喜欢
      • 2022-08-04
      • 2021-04-04
      • 2013-11-13
      • 2015-05-08
      • 2021-06-11
      • 1970-01-01
      • 2017-07-07
      • 1970-01-01
      • 2015-07-17
      相关资源
      最近更新 更多