Django-import-export, Экспорт в xlsx только одного объекта модели. Джанго

Я совершенно новый Django, и я создаю веб-сайт электронной коммерции с Django. Я хочу экспортировать объект модели в формат xlsx. Для этого я использую библиотеку django-import-export, но проблема в том, что эта библиотека экспортирует все объекты модели. Я просто хочу экспортировать только один объект. Например, если кто-то заказывает продукт, я хочу, чтобы этот объект заказа экспортировался в формат xlsx. Я могу написать это в оболочке Python, но я хочу, чтобы это было сделано в панели администратора. На картинке ниже вы можете увидеть мою модель Order и модель OrderItem. Как я могу экспортировать точно так, как на картинке, в xlsx.

Заказать модель в панели администратора

Models.py

class Order(models.Model):
    STATUS = (("NEW", "NEW"), ("ACCEPTED", "ACCEPTED"), ("COMPLETED", "COMPLETED"))
    customer = models.ForeignKey(Customer,on_delete=models.CASCADE, blank=True, null=True)
    name = models.CharField(max_length=50)
    surname = models.CharField(max_length=50)
    phone = models.CharField(max_length=50)
    email = models.EmailField(max_length=50, blank=True)
    address = models.CharField(max_length=100)
    status=models.CharField(max_length=10, choices=STATUS,default='NEW')
    total = models.FloatField()
    adminnote = models.CharField(max_length=100, blank=True)
    updated_at=models.DateTimeField(auto_now=True)
    ordered_at = models.DateTimeField(auto_now_add=True) 
def __str__(self):
    return self.name + self.surname

class OrderItem(models.Model):
    order = models.ForeignKey(Order, on_delete=models.CASCADE)
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    quantity = models.IntegerField()
    price = models.DecimalField(max_digits=8, decimal_places=2)
    total_price = models.DecimalField(max_digits=8, decimal_places=2)
    date_added = models.DateTimeField(auto_now_add=True)

admin.py

class OrderProductline(admin.TabularInline):
    model = OrderItem
    readonly_fields = ('order', 'product', 'price', 'quantity', 'total_price')
    can_delete = False
    extra = 0

class OrderResource(resources.ModelResource):
    class Meta:
        model = Order

class OrderAdmin(ImportExportModelAdmin):
    list_display = ['name', 'surname', 'phone', 'address', 'total', 'status', 'ordered_at']
    list_filter = ['status']
    exclude = ['customer']
    readonly_fields = ('name', 'surname', 'email', 'phone', 'address', 'total')
    can_delete = False
    inlines = [OrderProductline]
    resource_class = OrderResource

class OrderProductAdmin(admin.ModelAdmin):
    list_display = ['order', 'product', 'price', 'quantity','total_price']
    list_filter = ['order']

admin.site.register(Order, OrderAdmin,)
admin.site.register(OrderItem, OrderProductAdmin)

Я использую Django 3.0.0, Python 3.7.


person NewToDjango    schedule 01.12.2020    source источник


Ответы (1)


Для начала запустите пример приложения. Затем загляните в исходный код, чтобы увидеть, как объекты экспортируются из примера приложения.

django-import-export лучше всего подходит для экспорта объектов по одному на строку, если вам нужна только одна строка в вашем csv, то это возможно. Посмотрите на переопределение before_export() чтобы ограничить данные, которые вы экспортируете.

Если вам нужно экспортировать несколько объектов (например, в разные строки), это может быть возможно, но django-import-export может быть не лучшей библиотекой для этого варианта использования.

person Matthew Hegarty    schedule 01.12.2020
comment
Спасибо за идею - person NewToDjango; 01.12.2020