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.2.tar.gz (14.7 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.2-py3-none-any.whl (20.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: mtn_django_inventory-0.3.2.tar.gz
  • Upload date:
  • Size: 14.7 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.2.tar.gz
Algorithm Hash digest
SHA256 75f90979d4a5722862ceec590e870f48e82b92dfa1aa2c1f3bd6d1b499f851b7
MD5 0aef7561f87c9b27d4b9fd5375629f8c
BLAKE2b-256 71d08dcced1e2c9e2b06eae270ce1cf1a8154e2b20a74b8538078bfde4ba7327

See more details on using hashes here.

File details

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

File metadata

  • Download URL: mtn_django_inventory-0.3.2-py3-none-any.whl
  • Upload date:
  • Size: 20.6 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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 f69b85825e82224dcdcac6eab6f85521d5c229bc0bcd2a14ddf555db1408a516
MD5 a9909fe3942001338194707edcd5d6e3
BLAKE2b-256 25748c2e87a76369fd5841daf09e530f85e2b8b86e17efab3fcdf2a5c181d904

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