Skip to main content

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_MODEL pattern)
  • 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 LabelFormat admin 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 specific LabelFormat

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

  1. Install: pip install mtn-django-inventory (or add path dependency in pyproject.toml during dev)
  2. Add 'inventory' to INSTALLED_APPS
  3. Run python manage.py migrate
  4. 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mtn_django_inventory-0.3.1.tar.gz (14.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mtn_django_inventory-0.3.1-py3-none-any.whl (20.1 kB view details)

Uploaded Python 3

File details

Details for the file mtn_django_inventory-0.3.1.tar.gz.

File metadata

  • Download URL: mtn_django_inventory-0.3.1.tar.gz
  • Upload date:
  • Size: 14.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.23 {"installer":{"name":"uv","version":"0.11.23","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

Hashes for mtn_django_inventory-0.3.1.tar.gz
Algorithm Hash digest
SHA256 a0f01789e76fda67efaea4e99c215c321e8c99cd2a8af01cd92cf6e597c973c7
MD5 7e84ed406423c30148e3831c6a210ffa
BLAKE2b-256 a8ac60a8bbf3f2776f29130c330ff5caa8b53afba78befa594545a5488239946

See more details on using hashes here.

File details

Details for the file mtn_django_inventory-0.3.1-py3-none-any.whl.

File metadata

  • Download URL: mtn_django_inventory-0.3.1-py3-none-any.whl
  • Upload date:
  • Size: 20.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.23 {"installer":{"name":"uv","version":"0.11.23","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

Hashes for mtn_django_inventory-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 b9e241603f51ae07de9dd3b5c45b7e44b9328994fc516392d019ddfd5d41c5ad
MD5 ac021bdc6138b0194d38d5ee8973c0df
BLAKE2b-256 fef28ba05c44a94cf51886b76ce4359fecfdf755bcab1616ca945136b28b8b19

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page