为Djangoimportex注册多个管理类

2024-09-30 20:25:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我想为一个模型使用不同的导出格式,因此其中一个包含其他格式中不存在的其他元数据。在

我可以为这两种导出格式创建一个ModelResource子类,但我希望允许用户从管理界面选择它们。在

是这样的:

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',)

另一种资源是:

^{pr2}$

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

class IngredientColourLabelAdmin(ImportExportModelAdmin):
    """Ingredient import-export Admin interface"""
    resource_class = IngredientColourLabelResource

class MetadataIngredientColourLabelAdmin(ImportExportModelAdmin):
    """Ingredient import-export Admin interface"""
    resource_class = MetadataIngredientColourLabelResource

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

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

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


Tags: 用户models格式export资源labelclassmodelresource
1条回答
网友
1楼 · 发布于 2024-09-30 20:25:39

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

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

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

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

^{pr2}$

然后您可以在管理员中分别注册这两个模型:

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

相关问题 更多 >