Reusable Django app for inventory management
Project description
mtn-django-inventory
Reusable Django app for inventory management. Admin-first, plug-n-play, works with any Django project.
Built for tracking IT hardware (Ubiquiti, cameras, cable, etc.) but general enough for any industry.
Features
- Items — serialized (serial# tracked) or bulk (quantity + unit)
- Categories — hierarchical (parent/child)
- Locations — physical locations
- Clients — swappable client model (mirrors
AUTH_USER_MODELpattern) - User assignment — assign items to staff via
AUTH_USER_MODEL - Custom fields — per-category EAV fields (text, number, date, boolean, URL)
- Status tracking — In Stock / In Use / Maintenance / Retired / Disposed
- Audit log — tracks status/location/client/assignment changes
- Asset tags — auto-generated on save (
ASSET-00001, configurable prefix/padding) - Label printing — print-ready thermal labels with QR code; label dimensions managed via
LabelFormatadmin model (default: 3.5in × 1.1in) - CSV export — admin action exports filtered items
- CSV import — upload CSV with preview/confirm step
Installation
pip install mtn-django-inventory
Add to INSTALLED_APPS:
INSTALLED_APPS = [
# ...
'inventory',
]
Run migrations:
python manage.py migrate
Settings
Add an INVENTORY dict to your Django settings (all optional):
INVENTORY = {
'BASE_TEMPLATE': 'base.html', # template to extend in any package views
'ENABLE_CLIENT': True, # set False to hide the Client field on all Item admin views
'ASSET_TAG_AUTO': True, # auto-generate asset tag on save when blank
'ASSET_TAG_PREFIX': 'ASSET', # prefix for generated tags, e.g. 'ASSET' → 'ASSET-00001'
'ASSET_TAG_PADDING': 5, # zero-pad width for the numeric portion
}
Swapping the Client Model
By default the package uses its own built-in Client model. To point to an existing model in your project (e.g. a CRM customer model), set INVENTORY_CLIENT_MODEL before running your first migration:
# settings.py
INVENTORY_CLIENT_MODEL = 'crm.Customer' # default: 'inventory.Client'
The target model must exist and be migrated before installing this package. This follows the same pattern as Django's AUTH_USER_MODEL.
If you change this after the initial migration you'll need to write a data migration to update the FK references.
Label Printing
Label dimensions are managed via the Label Formats section in Django admin. A default 3.5in × 1.1in format (standard Dymo/thermal label) is created automatically on first migrate.
Labels include the asset tag (large), item name, manufacturer, serial number, and a QR code encoding the asset tag and serial number. They auto-print on page load.
Admin (zero config)
- Click the 🏷 Label link on any row in the Items changelist
- Select items and use the Print labels for selected items action for bulk printing
Public URLs (optional)
Include in your project's urls.py to expose label views outside the admin:
path('inventory/', include('inventory.urls', namespace='inventory')),
Then access:
/inventory/labels/<pk>/— single item label/inventory/labels/?ids=1,2,3— bulk labels- Add
?format=<pk>to either URL to use a specificLabelFormat
CSV Import Format
Required column: name
Optional columns:
| Column | Notes |
|---|---|
asset_tag |
Must be unique |
item_type |
serialized or bulk |
status |
in_stock, in_use, maintenance, retired, disposed |
category |
Matched by name (case-insensitive) |
manufacturer |
|
model_number |
|
serial_number |
|
quantity |
Numeric |
unit |
each, ft, m, box, roll, lot |
purchase_date |
YYYY-MM-DD |
warranty_expiry |
YYYY-MM-DD |
purchase_price |
Numeric |
location |
Matched by name (case-insensitive) |
client |
Matched by name (case-insensitive) |
notes |
Unmatched category, location, and client values are silently skipped (item is still created).
Applying to fulcrumsupport
- Install:
pip install mtn-django-inventory(or add path dependency in pyproject.toml during dev) - Add
'inventory'toINSTALLED_APPS - Run
python manage.py migrate - Log into admin — Category, Location, Client, and Item sections appear
Suggested initial categories for IT hardware:
Hardware
Network
Ubiquiti
Switches
Routers
Security
Cameras
NVR
Cabling
Cat6
Fiber
Coax
Compute
Servers
Workstations
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 mtn_django_inventory-0.2.0.tar.gz.
File metadata
- Download URL: mtn_django_inventory-0.2.0.tar.gz
- Upload date:
- Size: 14.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Arch Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a882a7eab52bf157e148ae8ee60a552a80bdbd96886edcb2ea5c1b44989091a2
|
|
| MD5 |
2c23ab271b91a7089dd237e7f6209b90
|
|
| BLAKE2b-256 |
989ce694ff47482cbe8379f729a93a76dd709fa1269a5471b65c8871787cb787
|
File details
Details for the file mtn_django_inventory-0.2.0-py3-none-any.whl.
File metadata
- Download URL: mtn_django_inventory-0.2.0-py3-none-any.whl
- Upload date:
- Size: 18.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Arch Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aa451f59eee56b4216f02bbddd30f3db0d1b632abd2f4f5d4627bf54344799a9
|
|
| MD5 |
d291a39e5e9e53926ac158c7cc04e256
|
|
| BLAKE2b-256 |
b155fd5af3008c64369a9c1a5e142750029a872072c0bcef41a1143780b6b582
|