DryORM
Code
Result
no cache
SQLite
PostgreSQL 17.4
MariaDB 11.4.5
Select a template
dryorm features
basic
bulk create
bulk fake
csv import
basic fk
self fk
user profile
dryorm tabular output
from django.db import models from django.contrib.auth.models import User class Profile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile') bio = models.TextField(blank=True) phone = models.CharField(max_length=20, blank=True) class Project(models.Model): name = models.CharField(max_length=100) description = models.TextField(blank=True) manager = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, related_name='managed_projects') members = models.ManyToManyField(User, related_name='projects') class Milestone(models.Model): title = models.CharField(max_length=100) due_date = models.DateField() project = models.ForeignKey(Project, on_delete=models.CASCADE, related_name='milestones') class Task(models.Model): title = models.CharField(max_length=100) description = models.TextField(blank=True) assigned_to = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, related_name='tasks') milestone = models.ForeignKey(Milestone, on_delete=models.CASCADE, related_name='tasks') is_completed = models.BooleanField(default=False) class Tag(models.Model): name = models.CharField(max_length=50) tasks = models.ManyToManyField(Task, related_name='tags') class Document(models.Model): name = models.CharField(max_length=100) file = models.FileField(upload_to='documents/') project = models.ForeignKey(Project, on_delete=models.CASCADE, related_name='documents') uploaded_by = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, related_name='documents') class Report(models.Model): title = models.CharField(max_length=100) created_at = models.DateTimeField(auto_now_add=True) task = models.OneToOneField(Task, on_delete=models.CASCADE, related_name='report') summary = models.TextField() from faker import Faker from django.contrib.auth.models import User from .models import Profile, Project, Milestone, Task, Tag, Document, Report from django.utils.timezone import now, timedelta from django.db import transaction from django.db.models import Count def run(): fake = Faker() with transaction.atomic(): print("Creating users...") users = [User(username=fake.user_name(), email=fake.email()) for _ in range(5)] User.objects.bulk_create(users) users = list(User.objects.order_by('-id')[:5][::-1]) # Preserve original order print("Creating profiles...") profiles = [Profile(user=u, bio=fake.text(), phone=fake.phone_number()) for u in users] Profile.objects.bulk_create(profiles) print("Creating projects...") projects = [ Project(name=fake.company(), description=fake.text(), manager=users[i]) for i in range(2) ] Project.objects.bulk_create(projects) projects = list(Project.objects.order_by('-id')[:2][::-1]) print("Adding members...") # Add members to projects for project in projects: project.members.set(users) print("Creating milestones...") milestones = [] for project in projects: for _ in range(2): milestones.append(Milestone( title=fake.bs().capitalize(), due_date=now().date() + timedelta(days=fake.random_int(min=10, max=90)), project=project )) Milestone.objects.bulk_create(milestones) milestones = list(Milestone.objects.order_by('-id')[:len(milestones)][::-1]) print("Creating tasks...") # Create Tasks tasks = [] for milestone in milestones: for _ in range(3): tasks.append(Task( title=fake.catch_phrase(), description=fake.text(), assigned_to=fake.random_element(users), milestone=milestone, is_completed=fake.boolean() )) Task.objects.bulk_create(tasks) tasks = list(Task.objects.order_by('-id')[:len(tasks)][::-1]) print("Creating tags...") tag_names = ["bug", "feature", "urgent", "backend", "frontend"] tags = [Tag(name=name) for name in tag_names] Tag.objects.bulk_create(tags) tags = list(Tag.objects.order_by('-id')[:len(tags)][::-1]) for tag in tags: tag.tasks.set(fake.random_elements(elements=tasks, length=4)) print("Creating documents...") documents = [] for project in projects: for _ in range(2): documents.append(Document( name=fake.file_name(), file='documents/dummy.txt', project=project, uploaded_by=fake.random_element(users) )) Document.objects.bulk_create(documents) print("Creating reports...") reports = [Report( title=f"Report for {task.title}", task=task, summary=fake.paragraph() ) for task in tasks[:5]] Report.objects.bulk_create(reports) # Return useful querysets return { "all_projects": list(Project.objects.values()), "user_task_counts": list(User.objects.annotate(task_count=Count('tasks')).values('username', 'task_count')), "open_tasks": list(Task.objects.filter(is_completed=False).values('title', 'assigned_to__username')), "milestone_tasks": list(Milestone.objects.annotate(task_count=Count('tasks')).values('title', 'task_count')), "tagged_tasks": list(Tag.objects.prefetch_related('tasks').values('name', 'tasks__title')), }
Output
Show Template
No output.
Queries
TCL
TCL
DDL
DDL
SELECT
S
INSERT
I
UPDATE
U
DELETE
D
REVERSE
R
Queries
Q
(
0
)
No queries.
✖ Close
Save & Share
✖
private?
Save
Save & Copy