【问题标题】:How to combine Django import_export with list_display in admin.py?如何在 admin.py 中将 Django import_export 与 list_display 结合使用?
【发布时间】:2021-09-10 19:27:58
【问题描述】:

我是 Django 新手,我想知道如何在 admin.py 中将 import_export 模块与 list_display 结合起来?

例如:

当我使用 list_display 显示两个字段(id 和 IP)时,admin.py 中的以下代码可以正常工作,但我看不到导入导出小部件:

from django.contrib import admin
from .models import SwitchModel

@admin.register(SwitchModel)
class SwitchAdmin(admin.ModelAdmin):
    list_display = ('id','IP')

当我使用以下代码时,我可以看到导入和导出小部件,但我不再看到两个字段(id 和 IP):

from django.contrib import admin
from .models import SwitchModel
from import_export import resources
from import_export.admin import ImportExportModelAdmin

class SwitchModelResource(resources.ModelResource):
    class Meta:
        model = SwitchModel

class SwitchModelAdmin(ImportExportModelAdmin):
    resource_class = SwitchModelResource

admin.site.register(SwitchModel, SwitchModelAdmin)

我尝试将两组代码组合在一起,如下所示:

from django.contrib import admin
from .models import SwitchModel
from import_export import resources
from import_export.admin import ImportExportModelAdmin

@admin.register(SwitchModel)
class SwitchAdmin(admin.ModelAdmin):
    list_display = ('id','IP')

class SwitchModelResource(resources.ModelResource):
    class Meta:
        model = SwitchModel

class SwitchModelAdmin(ImportExportModelAdmin):
    resource_class = SwitchModelResource

admin.site.register(SwitchModel, SwitchModelAdmin)

然后我一直收到以下错误:

如何让list_displayimport_export 小部件协同工作?有人能解释一下吗?

【问题讨论】:

    标签: python django django-import-export


    【解决方案1】:

    如果我正确理解了您的问题,您只需将您的 list_display 选项添加到您的管理员课程中。

        from django.contrib import admin
        from import_export import resources
        from import_export.admin import ImportExportModelAdmin
    
        from .models import SwitchModel
        
    
        class SwitchModelResource(resources.ModelResource):
            class Meta:
                model = SwitchModel
        
    
        class SwitchModelAdmin(ImportExportModelAdmin):
            list_display = ('id', 'IP')
            resource_class = SwitchModelResource
        
    
        admin.site.register(SwitchModel, SwitchModelAdmin)
    

    还值得注意的是,对模型使用小写字段名称是一种很好的做法,因此ip 而不是IP

    也许阅读过一些best practice info

    【讨论】:

    • 谢谢马克,我在 YouTube 上找到了答案。但我也会试试你的代码。
    • @ParryWang 是的,和我说的一样。
    【解决方案2】:

    在 Youtube 上找到答案:

    下面的代码实现了我想要的:

    from django.contrib import admin
    from .models import SwitchModel
    from import_export.admin import ImportExportModelAdmin
    
    @admin.register(SwitchModel)
    class SwitchModelAdmin(ImportExportModelAdmin):
        list_display = ('id', 'IP')
    

    【讨论】:

      【解决方案3】:

      试试这个:

      from django.contrib import admin
      from .models import SwitchModel
      from import_export import resources
      from import_export.admin import ImportExportModelAdmin
      
      // this class helps you add import export options to SwitchModel in admin
      class SwitchModelResource(resources.ModelResource):
          class Meta:
              model = SwitchModel
              exclude = ('id',) // this statement is to exclude the id field that is added by default, not excluding id gave me error
      
      @admin.register(SwitchModel)
      class SwitchAdmin(ImportExportModelAdmin):
          resource_class = SwitchModelResource
          list_display = ('id','IP')
      

      您也可以按照建议将SwitchModelResource 类添加到另一个名为resource.py 的文件中。
      抱歉,由于我最近开始学习import_export,所以我无法深入解释。
      我希望 cmets 能帮助你理解你的错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-26
        • 2013-03-07
        • 1970-01-01
        相关资源
        最近更新 更多