gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 12:32:01 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com