Skip to content
docs.djust.org

Scaffolding Generator

Generate a complete CRUD LiveView from a model name and field definitions.

Quick Start

python manage.py djust_gen_live blog Post title:string body:text published:boolean

This creates:

FileDescription
blog/views.pyPostListView with mount, search, show, create, update, delete handlers
blog/urls.pyURL routing using live_session()
blog/templates/blog/post_list.htmlList + detail panel with dj-* directives
blog/tests.pyBasic test scaffold

Usage

python manage.py djust_gen_live <app_name> <ModelName> [field:type ...] [options]

Arguments

ArgumentDescription
app_nameDjango app name (directory must exist)
model_namePascalCase model name (e.g. Post, BlogPost)
fieldsField definitions as name:type pairs

Options

OptionDescription
--dry-runPreview files without writing
--forceOverwrite existing files
--no-testsSkip generating test file
--apiGenerate JSON API (render_json) instead of HTML

Supported Field Types

TypeDjango Model FieldForm Input
stringCharField<input type="text">
textTextField<textarea>
integerIntegerField<input type="number">
floatFloatField<input type="number" step="any">
decimalDecimalField<input type="number" step="0.01">
booleanBooleanField<input type="checkbox">
dateDateField<input type="date">
datetimeDateTimeField<input type="datetime-local">
emailEmailField<input type="email">
urlURLField<input type="url">
slugSlugField<input type="text">
fk:ModelForeignKey<input type="number"> (ID)

Examples

Basic CRUD

python manage.py djust_gen_live blog Post title:string body:text

With Foreign Key

python manage.py djust_gen_live blog Post title:string body:text author:fk:User

Preview Without Writing

python manage.py djust_gen_live blog Post title:string --dry-run

JSON API Mode

python manage.py djust_gen_live blog Post title:string body:text --api

Overwrite Existing

python manage.py djust_gen_live blog Post title:string --force

Generated Code Patterns

Views

The generated view uses standard djust patterns:

  • mount() initializes state
  • _compute() re-queries the database
  • @event_handler() decorates all event handlers
  • Search uses Q objects for OR logic across text fields
  • CRUD operations: create, show, update, delete

URLs

Routes use live_session() for proper WebSocket support:

from djust.routing import live_session

urlpatterns = [
    *live_session("/blog", [
        path("post/", PostListView.as_view(), name="post_list"),
    ]),
]

Templates

Generated templates use djust directives:

  • dj-root / dj-view for LiveView binding
  • dj-input for real-time search
  • dj-click / dj-submit for event handlers
  • dj-value-* for passing parameters
  • dj-confirm for delete confirmation
  • dj-loading for loading states

After Generation

  1. Add your app to INSTALLED_APPS
  2. Add 'yourapp.views' to LIVEVIEW_ALLOWED_MODULES
  3. Include yourapp.urls in your root URL conf
  4. Create the model in yourapp/models.py
  5. Run python manage.py makemigrations && python manage.py migrate