Django import-export, экспорт только одного объекта со связанными объектами
У меня есть форма, которая позволяет пользователю зарегистрироваться на нашем сайте. Теперь мне нужно экспортировать все данные в excel, поэтому я обратился к пакету import-export. У меня есть 3 модели, Customer, Reference и Contact. Две последние модели имеют m2m с Customer. Я также создал ресурсы для этих моделей. Когда я использую Resource().export()
в конце метода done()
в представлении формы, он экспортирует все существующие объекты в базе данных, что не то, что я хочу.
Я пытался найти это в гугле и получил только один результат, который в основном говорит, что мне нужно использовать before_export()
, но я не могу найти нигде в документах, как это на самом деле работает.
Я попробовал запросить своего клиента вручную следующим образом:
customer = Customer.objects.filter(pk=customer.id)
customer_data = CustomerResource().export(customer)
, который работает нормально, но затем я застрял со связанными ссылками и контактами: reference_data = ReferenceResource().export(customer.references)
выдает мне TypeError, говоря 'ManyRelatedManager' object is not iterable
. Что имеет смысл, потому что export()
ожидает queryset, но я не уверен, можно ли получить его таким образом.
Любая помощь очень ценится!
Одним из способов является переопределение get_queryset()
, потенциально вы можете попытаться загрузить все связанные данные в одном запросе:
class ReferenceResource(resources.ModelResource):
def __init__(self, customer_id):
super().__init__()
self.customer_id = customer_id
def get_queryset(self):
qs = Customer.objects.filter(pk=self.customer.id)
# additional filtering here
return qs
class Meta:
model = Reference
# add fields as appropriate
fields = ('id', )
Для обработки отношений m2m вы можете модифицировать набор запросов, чтобы добавить эти дополнительные поля.
Это не полный ответ, но он может помочь вам продвинуться вперед.