我正在使用 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/