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.2.0.tar.gz (14.3 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.2.0-py3-none-any.whl (18.8 kB view details)

Uploaded Python 3

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

Hashes for mtn_django_inventory-0.2.0.tar.gz
Algorithm Hash digest
SHA256 a882a7eab52bf157e148ae8ee60a552a80bdbd96886edcb2ea5c1b44989091a2
MD5 2c23ab271b91a7089dd237e7f6209b90
BLAKE2b-256 989ce694ff47482cbe8379f729a93a76dd709fa1269a5471b65c8871787cb787

See more details on using hashes here.

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

Hashes for mtn_django_inventory-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 aa451f59eee56b4216f02bbddd30f3db0d1b632abd2f4f5d4627bf54344799a9
MD5 d291a39e5e9e53926ac158c7cc04e256
BLAKE2b-256 b155fd5af3008c64369a9c1a5e142750029a872072c0bcef41a1143780b6b582

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