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.0.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.0-py3-none-any.whl (19.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: mtn_django_inventory-0.3.0.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.0.tar.gz
Algorithm Hash digest
SHA256 4d2f52ca8c608884557d7eb4981a4c9a41428a20e304b3acdc1bec7612ce537f
MD5 ba154ee8f3acd3d8084860a47c1d84f8
BLAKE2b-256 2787d4522164d5082c564c6701872d89ed725c8a54946ed386ae9ca4b83ab26a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: mtn_django_inventory-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 19.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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 00908c175233447a50d267d7012bfb3d388450e690fd49545b42264750716069
MD5 5875865add0beda5c5c33e7fae748eac
BLAKE2b-256 bc73ba43b5150559e4e22c0b98701857298a2e98f5d92ce3995c007e804c6773

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