4 KiB
4 KiB
Seed Data Script
Management command to generate realistic test data for development and testing.
Quick Start
cd backend
# Basic usage (creates 1 org with default counts)
uv run python manage.py seed_data --email admin@example.com
Full Options
uv run python manage.py seed_data \
--email admin@example.com \ # Required: Admin user email
--orgs 2 \ # Number of orgs (default: 1)
--users-per-org 5 \ # Users per org (default: 3)
--leads 50 \ # Leads per org (default: 20)
--accounts 20 \ # Accounts per org (default: 10)
--contacts 30 \ # Contacts per org (default: 15)
--opportunities 15 \ # Opportunities per org (default: 10)
--cases 10 \ # Cases per org (default: 5)
--tasks 25 \ # Tasks per org (default: 10)
--teams 3 \ # Teams per org (default: 2)
--tags 10 \ # Tags per org (default: 5)
--seed 42 \ # Random seed for reproducibility
--password mypassword \ # Password for new users (default: testpass123)
--clear \ # Clear existing CRM data before seeding
--no-input # Skip confirmation prompts
Examples
# Create 2 organizations with lots of data
uv run python manage.py seed_data --email admin@example.com --orgs 2 --leads 100 --accounts 50
# Reproducible seeding (same data every time)
uv run python manage.py seed_data --email admin@example.com --seed 42
# Clear all CRM data and reseed
uv run python manage.py seed_data --email admin@example.com --clear --no-input
# Minimal data for quick testing
uv run python manage.py seed_data --email admin@example.com --leads 5 --accounts 3 --contacts 5 --opportunities 3 --cases 2 --tasks 5
Features
- Realistic data - Uses Faker library for names, companies, emails, addresses, etc.
- Weighted status distributions - Simulates realistic data:
- Leads: 40% assigned, 30% in process, 15% converted, 10% recycled, 5% closed
- Opportunities: 20% each open stage, 10% closed won, 10% closed lost
- Cases: 40% new, 25% assigned, 20% pending, 10% closed, 5% rejected
- Tasks: 30% new, 40% in progress, 30% completed
- Proper relationships:
- Accounts linked to contacts
- Opportunities linked to accounts
- Cases linked to accounts
- Tasks linked to ONE parent (account/opportunity/case/lead)
- Leads optionally linked to contacts
- M2M assignments - Each entity gets:
- 1-2 assigned profiles
- 0-1 team (70% chance)
- 0-3 tags (60% chance)
- Multi-tenancy - Admin user gets profile in ALL created orgs
- Reproducible - Use
--seedfor deterministic data generation
Clear Data Behavior
When using --clear:
- Deletes: Tasks, Cases, Opportunities, Leads, Accounts, Contacts, Teams, Tags
- Preserves: Users, Profiles, Organizations
This allows you to reseed CRM data without losing user accounts.
Sample Output
$ uv run python manage.py seed_data --email admin@test.com --orgs 2 --seed 42
Seeding CRM database...
Using seed: 42
--- Organization 1/2 ---
Created org: Acme Corporation (USD, US)
Created 4 profiles (1 admin, 3 users)
Created 2 teams
Created 5 tags
Created 15 contacts
Created 10 accounts
Created 20 leads
Created 10 opportunities
Created 5 cases
Created 10 tasks
--- Organization 2/2 ---
Created org: Global Tech Inc (EUR, DE)
Created 4 profiles (1 admin, 3 users)
Created 2 teams
Created 5 tags
Created 15 contacts
Created 10 accounts
Created 20 leads
Created 10 opportunities
Created 5 cases
Created 10 tasks
Seeding complete!
Summary:
Organizations: 2
Users: 7
Profiles: 8
Teams: 4
Tags: 10
Contacts: 30
Accounts: 20
Leads: 40
Opportunities: 20
Cases: 10
Tasks: 20
Total time: 1.22 seconds
Dependencies
The script requires the faker package, which is already declared in pyproject.toml and installed by uv sync. No extra step is needed.