# Generated by Django 4.2.7 on 2025-10-08 09:41 from django.db import migrations, models import django.db.models.deletion import django.utils.timezone class Migration(migrations.Migration): initial = True dependencies = [ ] operations = [ migrations.CreateModel( name='BlogAuthor', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(max_length=200)), ('email', models.EmailField(blank=True, max_length=254, null=True, unique=True)), ('bio', models.TextField(blank=True)), ('avatar', models.ImageField(blank=True, null=True, upload_to='blog/authors/')), ('is_active', models.BooleanField(default=True)), ('created_at', models.DateTimeField(auto_now_add=True)), ('updated_at', models.DateTimeField(auto_now=True)), ], options={ 'verbose_name': 'Blog Author', 'verbose_name_plural': 'Blog Authors', 'ordering': ['name'], }, ), migrations.CreateModel( name='BlogCategory', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('title', models.CharField(max_length=100)), ('slug', models.SlugField(max_length=100, unique=True)), ('description', models.TextField(blank=True)), ('display_order', models.PositiveIntegerField(default=0)), ('is_active', models.BooleanField(default=True)), ('created_at', models.DateTimeField(auto_now_add=True)), ('updated_at', models.DateTimeField(auto_now=True)), ], options={ 'verbose_name': 'Blog Category', 'verbose_name_plural': 'Blog Categories', 'ordering': ['display_order', 'title'], }, ), migrations.CreateModel( name='BlogTag', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(max_length=50, unique=True)), ('slug', models.SlugField(unique=True)), ('is_active', models.BooleanField(default=True)), ('created_at', models.DateTimeField(auto_now_add=True)), ], options={ 'verbose_name': 'Blog Tag', 'verbose_name_plural': 'Blog Tags', 'ordering': ['name'], }, ), migrations.CreateModel( name='BlogPost', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('title', models.CharField(max_length=300)), ('slug', models.SlugField(max_length=300, unique=True)), ('content', models.TextField()), ('excerpt', models.TextField(blank=True, help_text='Short excerpt for preview')), ('thumbnail', models.ImageField(blank=True, null=True, upload_to='blog/thumbnails/')), ('thumbnail_url', models.CharField(blank=True, help_text='External thumbnail URL', max_length=500)), ('featured_image', models.ImageField(blank=True, null=True, upload_to='blog/featured/')), ('featured_image_url', models.CharField(blank=True, help_text='External featured image URL', max_length=500)), ('meta_description', models.CharField(blank=True, max_length=160)), ('meta_keywords', models.CharField(blank=True, max_length=255)), ('published', models.BooleanField(default=True)), ('featured', models.BooleanField(default=False, help_text='Featured post')), ('views_count', models.PositiveIntegerField(default=0)), ('reading_time', models.PositiveIntegerField(default=5, help_text='Estimated reading time in minutes')), ('published_at', models.DateTimeField(default=django.utils.timezone.now)), ('created_at', models.DateTimeField(auto_now_add=True)), ('updated_at', models.DateTimeField(auto_now=True)), ('author', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='posts', to='blog.blogauthor')), ('category', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='posts', to='blog.blogcategory')), ('tags', models.ManyToManyField(blank=True, related_name='posts', to='blog.blogtag')), ], options={ 'verbose_name': 'Blog Post', 'verbose_name_plural': 'Blog Posts', 'ordering': ['-published_at', '-created_at'], }, ), migrations.CreateModel( name='BlogComment', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(max_length=100)), ('email', models.EmailField(max_length=254)), ('content', models.TextField()), ('is_approved', models.BooleanField(default=False)), ('created_at', models.DateTimeField(auto_now_add=True)), ('updated_at', models.DateTimeField(auto_now=True)), ('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='replies', to='blog.blogcomment')), ('post', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='comments', to='blog.blogpost')), ], options={ 'verbose_name': 'Blog Comment', 'verbose_name_plural': 'Blog Comments', 'ordering': ['-created_at'], }, ), migrations.AddIndex( model_name='blogpost', index=models.Index(fields=['-published_at'], name='blog_blogpo_publish_e75c11_idx'), ), migrations.AddIndex( model_name='blogpost', index=models.Index(fields=['slug'], name='blog_blogpo_slug_361555_idx'), ), migrations.AddIndex( model_name='blogpost', index=models.Index(fields=['published'], name='blog_blogpo_publish_059755_idx'), ), ]