Объект MediaDefiningClass не повторяется - django-import-export - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть приложение 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)

Что я здесь не так делаю?Кто-нибудь, пожалуйста, помогите.

1 Ответ

0 голосов
/ 04 февраля 2019

изменить в соответствии с этим,

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 автоматически поместит ее на панель admin в соответствии с resources, который вы использовали.

...