YAML Structure Reference
This page provides a complete reference for the YAML structure used by django-nested-seed.
Basic Structure
All models use list format with Django app_label and ModelName:
app_label:
ModelName:
- field_name: value
other_field: value
Basic Object
Simple object without reference:
app_label:
ModelName:
- field_name: value
other_field: value
Object with Reference
Explicit reference key for later use:
app_label:
ModelName:
- $ref: my_key # Reference key for this object
field_name: value
Auto-generated Reference
Objects without $ref get auto-generated keys:
app_label:
ModelName:
- field_name: value # Auto: modelname_0
- field_name: value # Auto: modelname_1
ForeignKey - Nested
Inline nested object:
app_label:
ModelName:
- field_name: value
related_field:
nested_field: value
ForeignKey - Referenced
Reference to existing object defined in YAML:
app_label:
ModelName:
- field_name: value
related_field: "$my_key" # Reference using $ref_key
ForeignKey - Database Lookup
Reference existing database record:
By primary key:
app_label:
ModelName:
- field_name: value
related_field: "@pk:123"
By single field:
app_label:
ModelName:
- field_name: value
related_field: "@username:alice"
By multiple fields:
app_label:
ModelName:
- field_name: value
related_field: "@{name:John,email:john@example.com}"
OneToOne Relationship
Nested directly under parent:
app_label:
ModelName:
- field_name: value
one_to_one_field:
nested_field: value
Reverse ForeignKey
Nested collection using Django reverse accessor:
app_label:
ModelName:
- field_name: value
reverse_relation_set: # Django reverse accessor
- child_field: value
- child_field: value
ManyToMany - References
List of references to YAML objects:
app_label:
ModelName:
- field_name: value
many_to_many_field:
- "$ref_key_1"
- "$ref_key_2"
ManyToMany - Database Lookups
Reference existing database records:
app_label:
ModelName:
- field_name: value
many_to_many_field:
- "@slug:python"
- "@pk:42"
ManyToMany - Mixed
Combine references, lookups, and inline objects:
app_label:
ModelName:
- field_name: value
many_to_many_field:
- "$ref_key" # Reference YAML object
- "@slug:existing" # Reference database record
- inline_field: value # Create new object inline
ManyToMany - Through Model
With extra fields on intermediate table:
app_label:
ModelName:
- field_name: value
many_to_many_field:
- related_object: "$ref_key"
extra_field: value # Through model field
date_field: "2024-01-01"
Reference Key Rules
Reference keys must be unique across all models
Keys are case-sensitive
Use descriptive names for better readability
Auto-generated keys follow the pattern:
{modelname}_{index}
Field Types
CharField/TextField
name: "String value"
description: "Multi-line strings work too"
IntegerField/DecimalField
age: 25
price: "99.99"
budget: "1000000.00"
BooleanField
is_active: true
is_published: false
DateField/DateTimeField
birth_date: "2000-01-01"
created_at: "2024-01-01T10:30:00"
published_date: "2024-12-13"
JSONField
metadata:
key1: "value1"
key2: 123
nested:
data: true
Choice Fields
status: "PUBLISHED" # Use the choice value, not the display name
Complete Example
Here’s a comprehensive example showing multiple features:
auth:
User:
- $ref: alice
username: "alice"
email: "alice@example.com"
testapp:
Technology:
- $ref: python
name: "Python"
version: "3.11"
- $ref: django
name: "Django"
version: "4.2"
Organization:
- name: "TechCorp"
code: "TC"
founded_date: "2020-01-01"
configuration:
timezone: "UTC"
currency: "USD"
divisions:
- name: "Engineering"
location: "NYC"
budget: "1000000.00"
department_set:
- name: "Backend"
code: "BE-01"
manager: "$alice"
project_set:
- name: "API Rewrite"
status: "IN_PROGRESS"
start_date: "2024-01-01"
technologies:
- "$python"
- "$django"
task_set:
- title: "Design endpoints"
description: "Define REST API"
priority: "HIGH"
status: "DONE"
assigned_to: "$alice"
estimated_hours: 20