【问题标题】:Django Import/Export to multiple Models (foreignkey)Django 导入/导出到多个模型(外键)
【发布时间】:2015-08-25 06:53:56
【问题描述】:

这个问题已经被问过好几次了——但没有一个解决方案对我有用。

下面的代码可以工作(因为没有错误),但它没有看到将 new 数据导入外键类的任何内容。它只会在外键已经存在的情况下导入数据。

这有意义吗?

Models.py (sn-p)

...
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)

【问题讨论】:

    标签: python django django-import-export


    【解决方案1】:

    试试

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

    我建议你将模型字段命名为uncapitalized

    很难理解你真正在问什么。

    如果你说的是“想创建外键对象并用excel数据填充外对象的属性”

    我认为您需要首先创建外来对象并将其与其他模型相关联,这意味着您需要在 ModelResource 类中覆盖或定义一个函数并从您的管理员那里调用它。

    【讨论】:

    • 谢谢。我没有正确阅读错误 - 问题是我想将新字段导入外键。它只允许我导入已经存在的值(到外部字段)。如果数据不存在,我怎么能说导入值?
    【解决方案2】:

    他们为此提供了一个小部件-http://django-import-export.readthedocs.org/en/latest/api_widgets.html。我不明白如何使用它。

    【讨论】:

    • 是的——我也试过这个方法。真的很感激它的任何方向。这就是我要做的(并且我更新了原始帖子)。 codeclass ProductResource(resources.ModelResource): store_name = fields.Field( widget=widgets.ForeignKeyWidget(Store, 'store_name')) def __unicode__(self): return self.store_name.name class Meta: model = Product fields = ('id','first_name','second_name','store_name').....
    猜你喜欢
    • 2015-11-28
    • 1970-01-01
    • 2021-07-21
    • 2021-10-29
    • 1970-01-01
    • 2015-02-17
    • 2019-12-16
    • 1970-01-01
    • 2021-10-31
    相关资源
    最近更新 更多