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 вы можете модифицировать набор запросов, чтобы добавить эти дополнительные поля.

Это не полный ответ, но он может помочь вам продвинуться вперед.

Вернуться на верх