【问题标题】:Django-import-export, Export to xlsx only one model object. DjangoDjango-import-export,只导出到 xlsx 一个模型对象。姜戈
【发布时间】:2021-03-13 02:05:16
【问题描述】:

我是一个全新的 Django,我正在使用 Django 构建一个电子商务网站。我想将模型的对象导出为 xlsx 格式。我正在使用 django-import-export 库来执行此操作,但问题是该库导出模型的所有对象。我只想导出一个对象。例如,如果有人订购产品,我希望将该订单对象导出为 xlsx 格式。我可以在 python shell 中编写它,但我希望它在管理面板中完成。在下图中,您可以看到我的 Order 模型和 OrderItem 模型。我怎样才能完全像在图片中一样导出到 xlsx。

Order model in admin panel

模型.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

【问题讨论】:

    标签: python django django-import-export


    【解决方案1】:

    首先让example app 运行。然后查看源代码,了解如何从示例应用中导出对象。

    django-import-export 最适合每行导出一个对象,如果您的 csv 中只需要一行,那么这是可能的。查看覆盖 before_export() 以限制您要导出的数据。

    如果您需要导出多个对象(例如,在不同的行上),那么这可能是可行的,但 django-import-export 可能不是该用例的最佳库。

    【讨论】:

    • 感谢您的意见
    猜你喜欢
    • 2022-01-14
    • 2019-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-18
    • 1970-01-01
    相关资源
    最近更新 更多