为django-import-export注册多个管理类

时间:2016-06-01 10:32:53

标签: python django admin django-import-export

我希望为模型提供不同的导出格式,因此其中一个包含其他元数据中不存在的其他元数据。

我可以为两种导出格式创建ModelResource子类,但我想允许用户从管理界面中选择它们。

这是这样的:

GET URL

其他资源如:

class IngredientColourRelation(models.Model):
    ingredient = models.CharField()
    colour_label = models.CharField()
    metadata = models.CharField()

class IngredientColourLabelResource(resources.ModelResource):
    """Ingredient Resource class for importing and exporting."""

    ingredient = resources.Field()
    colour_label = resources.Field()

    class Meta:
        """Meta class"""
        model = IngredientColourRelation

        fields = ('id', 'ingredient', 'colour_label',)
        export_order = ('id', 'ingredient', 'colour_label',)

我想我可以通过两个Admin类注册这两个资源,比如:

class MetadataIngredientColourLabelResource(resources.ModelResource):
    """Ingredient Resource class for importing and exporting."""

    ingredient = resources.Field()
    colour_label = resources.Field()
    metadata = resources.Field()

    class Meta:
        """Meta class"""
        model = IngredientColourRelation

        fields = ('id', 'ingredient', 'colour_label', 'metadata',)
        export_order = ('id', 'ingredient', 'colour_label', 'metadata',)

但是当我点击更改列表视图中的导出按钮时,只使用了最新的一个。

有关如何允许用户选择不同资源格式的任何建议吗?

1 个答案:

答案 0 :(得分:0)

您可以添加代理模型,如下所示:

class IngredientColourRelationWithMetadataExport(IngredientColourRelation):
    class Meta:
        proxy = True
        verbose_name = "IngredientColourRelation (Exports Metadata)"

此模型将共享相同的数据库表并返回与原始模型相同的数据,但您可以在Admin中单独注册它。如果有用,您还可以添加其他方法和属性(但不是字段)。

更改MetadataIngredientColourLabelResource中的模型参考以使用代理模型:

class MetadataIngredientColourLabelResource(resources.ModelResource):
    """Ingredient Resource class for importing and exporting."""

    ingredient = resources.Field()
    colour_label = resources.Field()
    metadata = resources.Field()

    class Meta:
        """Meta class"""
        model = IngredientColourRelationWithMetadataExport

        fields = ('id', 'ingredient', 'colour_label', 'metadata',)
        export_order = ('id', 'ingredient', 'colour_label', 'metadata',)

然后,您可以在管理员中单独注册两个模型:

admin.site.register(IngredientColourRelation, IngredientColourLabelAdmin)
admin.site.register(IngredientColourRelationWithMetadataExport, 
    MetadataIngredientColourLabelAdmin)