【问题标题】:'MediaDefiningClass' object is not iterable - django-import-export'MediaDefiningClass' 对象不可迭代 - django-import-export
【发布时间】:2019-02-04 04:26:01
【问题描述】:

我有一个正在开发的 django 应用程序,在管理页面中,我希望能够将模型的列表视图导出为 csv、xls 和多种其他文件格式。我为此使用django-import-export 包。我已在 settings.py 中安装并将其添加到我已安装的应用程序中。

在我的models.py 我有..

class Student(models.Model):
  firstname = models.CharField(max_length=20)
  middlename = models.CharField(max_length=20)
  lastname = models.CharField(max_length=20)
  admission_number = models.CharField(max_length=10)
  grade = models.CharField(max_length=10)
  joined = models.DateField(auto_now_add=True)

  def __str__(self):
    return f'{self.firstname} {self.lastname}'

我的admin.py 文件

class StudentAdmin(admin.ModelAdmin):
  list_display = ('firstname', 'lastname', 'admission_number', 'grade', 'joined')
  list_filter = ('grade', 'joined',)


admin.site.register(Student, StudentAdmin)

为了处理导入和导出功能,我在同一目录中创建了一个名为 resource.py 的文件,其中包含以下 django-import-export 特定代码。

from import_export import resources
from import_exports.fields import Field
from .models import Student

class StudentResource(resources.ModelResource):
  full_name = Field(column_name='name')

  class Meta:
    model = Student
    fields = ('full_name', 'admission_number', 'grade', 'joined')
    widgets = {
      'joined': { 'format': '%d/%m/%Y'},
    }

  def dehydrate_full_name(self, student):
    return f'{student.firstname} {student.middlename} {student.lastname}'

从上面的代码可以看出,我创建了一个新字段full_name,我想在name 列下保存一个学生的全名,我希望它以这种方式导出。

我希望能够通过管理员操作导出数据,并且在阅读了 django-import-export 文档后,我更新了我的 admin.py 文件..

# Added these imports
from import_export.admin import ImportExportActionModelAdmin
from .resource import StudentResource

class StudentExportAdmin(ImportExportActionModelAdmin):
    resource_class = StudentResource

class StudentAdmin(admin.ModelAdmin):
  list_display = ('firstname', 'lastname', 'admission_number', 'grade', 'joined')
  list_filter = ('grade', 'joined',)


admin.site.register(Student, StudentAdmin)
admin.site.register(StudentExportAdmin)

我在这里做错了什么?有人请帮忙。

【问题讨论】:

    标签: python django django-import-export


    【解决方案1】:

    照此更改,

    class StudentAdmin(ImportExportActionModelAdmin):
      resource_class = StudentResource
      list_display = ('firstname', 'lastname', 'admission_number', 'grade', 'joined')
      list_filter = ('grade', 'joined',)
    
    
    
    admin.site.register(Student,StudentAdmin)
    

    删除此行,因为import-export 会根据您使用的resources 自动将其放置在admin 面板中。

    【讨论】:

    • 那行得通。谢谢。只是为了澄清,你能告诉我resource.py文件中的代码是否正确吗?至少全名部分。
    • 上述解决方案成功消除了错误,但在管理员中,没有导出为?我错过了什么?
    猜你喜欢
    • 2015-11-11
    • 2017-06-12
    • 1970-01-01
    • 2021-07-04
    • 2021-02-04
    • 2020-02-28
    • 2013-05-07
    • 2019-07-25
    • 1970-01-01
    相关资源
    最近更新 更多