Экспорт с использованием django-import-export и отображение подробных имен связанных объектов
Я смотрел на следующую библиотеку - django-import-export. Однако у меня возникли проблемы с экспортом с понятными / подробными именами столбцов для связанных объектов.
Ссылка по теме: https://github.com/django-import-export/django-import-export/issues/52
class HumanModelResource(resources.ModelResource):
def get_export_headers(self):
headers = []
for field in self.get_fields():
model_fields = self.Meta.model._meta.get_fields()
header = next((x.verbose_name for x in model_fields if x.name == field.column_name), field.column_name)
headers.append(header)
return headers
class Meta:
model = Human
fields = ("name", "pet__name")
class HumanAdmin(ExportMixin, admin.ModelAdmin):
resource_class = HumanModelResource
list_display = ("name", "pet")
class Human(models.Model):
name = models.CharField(max_length=255, verbose_name="Name")
pet = models.ForeignKey(Pet)
class Pet(models.Model):
name = models.CharField(max_length=255, verbose_name="Pet Name")
При экспорте отобразится "Имя" для человека, но имя питомца будет отображаться как "имя питомца".
Я не уверен, как подходить к переопределению метода get_export_headers для отображения связанных объектов с подробным именем.
В настоящее время я использую: - Python 2.7 - Django 1.11
0 ответов
Я предполагаю, что ваш get_export_headers()
терпит неудачу, потому что x.name == field.column_name
совпадение не удается (x.name
знак равно pet
а также field.column_name
знак равно pet__name
).
Таким образом, вы можете исправить эту конкретную ошибку, но есть и другой способ, который больше соответствует API Django Import / Export: явно определите отношение внешнего ключа.
from import-export import resources, fields
class HumanModelResource(resources.ModelResource):
petname = fields.Field(
attribute="pet",
column_name="Pet Name",
widget=ForeignKeyWidget(Pet, "name")
)
class Meta:
model = Human
fields = ("name", "petname") # note the change
(Примечание: не проверено.)