'MediaDefiningClass' 对象不可迭代 - django-import-export
'MediaDefiningClass' object is not iterable - django-import-export
我有一个正在开发的 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)
我在这里做错了什么?有人请帮忙。
照这个改,
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
面板中。
我有一个正在开发的 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)
我在这里做错了什么?有人请帮忙。
照这个改,
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
面板中。