Django 在外键模型中导入导出新值

标签 django django-import-export

我正在使用 django 导入导出库来处理数据。它运行良好,但我无法让它导入外键中尚不存在的对象。

如果对象(csv 中的值)存在于外键模型中 - 那么它可以正常导入。

但是如果外键模型中不存在对象/值——它会说“匹配的查询不存在”并且不会导入数据。

如果外键中不存在新对象,我如何告诉它向外键模型添加新对象?

Models.py 片段

class Store(models.Model):

    store_name = models.CharField(max_length=30)
    def __unicode__(self):
        return self.store_name
    #etc

class Product(models.Model):

    Store = models.ForeignKey(Store)
    Category = models.ForeignKey(Category)
    first_name = models.CharField(max_length=30)
    second_name = models.CharField(max_length=30)
...

Admin.py 片段

admin.site.register(Category)
admin.site.register(Store)

class ProductResource(resources.ModelResource):

     store_name = fields.Field(column_name='store_name', attribute='Store',
                       widget=ForeignKeyWidget(Store, 'store_name'))

    def __unicode__(self):
        return self.store_name.name

    class Meta:
        model = Product
        fields = ('id', 'first_name', 'second_name','store_name')
        export_order = ('id', 'second_name', 'first_name')
        skip_unchanged = False
        report_skipped = False
        widgets = {
                'published': {'format': '%d.%m.%Y'},
                }


class ProductAdmin(ImportExportModelAdmin):
    resource_class = ProductResource
    list_display = ('first_name', 'second_name')

admin.site.register(Product, ProductAdmin)

最佳答案

ForeignKeyWidget 中你有方法

  def clean(self, value):
        val = super(ForeignKeyWidget, self).clean(value)
        return self.model.objects.get(**{self.field: val}) if val else None

您可以尝试覆盖它来执行类似get_or_create...

它应该看起来像这样......

from import_export.widgets import ForeignKeyWidget
class MyCustomizationToFKWidget(ForeignKeyWidget):

      def clean(self, value):
            val = super(ForeignKeyWidget, self).clean(value)
            HERE SOME LOGIC OVERRIDEN

关于Django 在外键模型中导入导出新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32369984/

相关文章:

python - 相当于 Tornado 的阻塞?

django - 为什么可以在 "multiple ways"处导入UpdateView

python - 如何获取 Celery 的 app.control.broadcast 的工作地址

django - 自定义管理导入表单

Django 导入导出 : only export

python - Django导入/导出: ForeignKey fields return None

Django通过子模型计数(一对多关系)对父模型进行排序

python - django 测试覆盖率与黑盒测试?

python - django 导入_导出 |数据未从数据库导出

Django 导入导出排除不起作用