首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >'MediaDefiningClass‘对象不可迭代- django-import-export

'MediaDefiningClass‘对象不可迭代- django-import-export
EN

Stack Overflow用户
提问于 2019-02-04 12:26:01
回答 1查看 691关注 0票数 0

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

在我的models.py里我有..

代码语言:javascript
复制
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文件

代码语言:javascript
复制
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的代码。

代码语言:javascript
复制
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文件。

代码语言:javascript
复制
# 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)

我在这里做错了什么?谁来帮帮忙。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-04 12:50:36

根据这个来改变,

代码语言:javascript
复制
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面板中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54510132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档