Django queryset Excel extraction
Project description
django-excel-extract
Installation
pip install django-excel-extract
Documentation
django-excel-extract helps you easily export Django model data into an Excel file (.xlsx) with minimal setup.
Features
- Export any Django model
QuerySetto Excel. - Customize field output
(dates, datetimes, booleans, choices). - Exclude specific fields.
- Set custom formats for dates and booleans.
- Supports
ManyToManyfields. - Simple integration into Django views.
Usage
You must use the Excel class to generate and export an Excel file.
Parameters
Excel class require parameters:
- model (
Model) — Django model class to export. - queryset (
QuerySet) — Django queryset containing the data to export. - file_name (
str, optional) — Name of the generated file (default:'file_name'). - title (
str, optional) — Sheet title inside the Excel file (default:'title). - choices (
dict, optional) — Dictionary for converting Djangochoicesfields into human-readable text. - exclude (
list[str], optional) — List of field names to exclude from export. - date_format (
str, optional) — Format string for date fields (e.g.,'%d/%m/%Y'). - date_time_format (
str, optional) — Format string for datetime fields (e.g.,'%d/%m/%Y %H:%M'). - bool_true (
str, optional) — Text representation for booleanTruevalues (default:'True'). - bool_false (
str, optional) — Text representation for booleanFalsevalues (default:'False').
Examples
models.py
from django.db import models
from enum import Enum
import datetime as dt
import pytz
class StatusReport(Enum):
PENDING = 'Pending'
IN_PROGRESS = 'In Progress'
COMPLETED = 'Completed'
FAILED = 'Failed'
class TypeReport(models.TextChoices):
INFO = 'Information', 'Information'
WARNING = 'Warning', 'Warning'
ERROR = 'Error', 'Error'
class Priority(models.IntegerChoices):
LOW = 1, 'Low'
MEDIUM = 2, 'Medium'
HIGH = 3, 'High'
def generate_unique_number():
date_now = dt.datetime.now(pytz.timezone('Europe/London'))
return int(
f'{date_now.day}{date_now.month}{date_now.year % 1000}{date_now.hour}{date_now.minute}{date_now.microsecond}'
)
class Category(models.Model):
name = models.CharField(max_length=255, verbose_name='Category Name')
class Meta:
verbose_name = 'Category'
verbose_name_plural = 'Categories'
def __str__(self) -> str:
return self.name
class Tags(models.Model):
name = models.CharField(max_length=255, verbose_name='Tag Name')
class Meta:
verbose_name = 'Tag'
verbose_name_plural = 'Tags'
def __str__(self) -> str:
return self.name
class Report(models.Model):
report_num = models.PositiveBigIntegerField(
unique=True,
default=generate_unique_number,
verbose_name='Report Number',
)
type_report = models.CharField(
max_length=255,
choices=TypeReport.choices,
verbose_name='Type of Report',
)
priority = models.IntegerField(
choices=Priority.choices,
verbose_name='Priority',
)
category = models.ForeignKey(
Category,
on_delete=models.CASCADE,
related_name='report_category',
verbose_name='Category',
)
tag = models.ManyToManyField(
Tags,
related_name='report_tag',
verbose_name='Tags',
)
name = models.CharField(max_length=255, verbose_name='Report Name')
status_report = models.CharField(
max_length=255,
choices=[(choice.name, choice.value) for choice in StatusReport],
verbose_name='Status of Report',
)
description = models.TextField(verbose_name='Report Description')
created_at = models.DateTimeField(
auto_now_add=True, verbose_name='Creation date'
)
class Meta:
verbose_name = 'Report'
verbose_name_plural = 'Reports'
def __str__(self) -> str:
return f'{self.report_num} - {self.name}'
views.py
from django.shortcuts import render
from app.models import Report, StatusReport, TypeReport
from excel_extract.excel import Excel
def index(request):
return render(request, 'index.html', {})
def extract_excel(request):
queryset = Report.objects.all()
exclude = ['id']
choices = {
'status_report': {item.name: item.value for item in StatusReport},
'type_report': {item.name: item.value for item in TypeReport},
}
excel = Excel(
model=Report,
queryset=queryset,
choices=choices,
file_name='report',
title='Report',
exclude=exclude,
date_time_format='%d/%m/%Y %H:%M',
)
return excel.to_excel()
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file django_excel_extract-0.0.4.tar.gz.
File metadata
- Download URL: django_excel_extract-0.0.4.tar.gz
- Upload date:
- Size: 5.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8a310071ee7cd4f62f655b1b2b65bb17b771031cb4f52cec8958c5cdd2bbae47
|
|
| MD5 |
1ff05b4b41b6acda5dd993924590bee1
|
|
| BLAKE2b-256 |
3866f45e9ffbef160f780d0242a3eef6284d0a0d70315ccbe722caa03f8f6a3c
|
File details
Details for the file django_excel_extract-0.0.4-py3-none-any.whl.
File metadata
- Download URL: django_excel_extract-0.0.4-py3-none-any.whl
- Upload date:
- Size: 6.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
87e752d3bd9aab79b0211e005b711a01bbce3e03c481e7035d4b55cbf0e790b3
|
|
| MD5 |
28c6973a07a54f069eb361ce91b3c58b
|
|
| BLAKE2b-256 |
16245e1f504b48ebeba922c32a9f26cef3b530160b7c2cd5236ebf5fecf4d30e
|