diff --git a/markdownblog/blog/admin.py b/markdownblog/blog/admin.py index 8c38f3f..20517be 100644 --- a/markdownblog/blog/admin.py +++ b/markdownblog/blog/admin.py @@ -1,3 +1,20 @@ from django.contrib import admin +from blog.models import Blogpost, Topic, Tag + # Register your models here. +class BlogPostAdmin(admin.ModelAdmin): + pass + + +class TopicAdmin(admin.ModelAdmin): + pass + + +class TagAdmin(admin.ModelAdmin): + pass + + +admin.site.register(Blogpost, BlogPostAdmin) +admin.site.register(Topic, TopicAdmin) +admin.site.register(Tag, TagAdmin) diff --git a/markdownblog/blog/factories.py b/markdownblog/blog/factories.py new file mode 100644 index 0000000..27c8ae0 --- /dev/null +++ b/markdownblog/blog/factories.py @@ -0,0 +1,11 @@ +import factory + +from blog.models import Topic + + +class TopicFactory(factory.Factory): + class Meta: + model = Topic + + name = factory.Faker("word") + numbered = False diff --git a/markdownblog/blog/migrations/0001_initial.py b/markdownblog/blog/migrations/0001_initial.py new file mode 100644 index 0000000..ac2fd64 --- /dev/null +++ b/markdownblog/blog/migrations/0001_initial.py @@ -0,0 +1,42 @@ +# Generated by Django 4.0.4 on 2022-06-01 08:31 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Tag', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=255)), + ], + ), + migrations.CreateModel( + name='Topic', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=255)), + ('numbered', models.BooleanField(default=False)), + ('rootTopic', models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, to='blog.topic')), + ], + ), + migrations.CreateModel( + name='Blogpost', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', models.DateTimeField(auto_now_add=True)), + ('last_modified', models.DateTimeField(auto_now=True)), + ('title', models.CharField(max_length=255)), + ('tags', models.ManyToManyField(to='blog.tag')), + ('topics', models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, to='blog.topic')), + ], + ), + ] diff --git a/markdownblog/blog/migrations/0002_alter_blogpost_topics_alter_topic_roottopic.py b/markdownblog/blog/migrations/0002_alter_blogpost_topics_alter_topic_roottopic.py new file mode 100644 index 0000000..3f18b5b --- /dev/null +++ b/markdownblog/blog/migrations/0002_alter_blogpost_topics_alter_topic_roottopic.py @@ -0,0 +1,24 @@ +# Generated by Django 4.0.5 on 2022-06-01 14:09 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('blog', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='blogpost', + name='topics', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='blog.topic'), + ), + migrations.AlterField( + model_name='topic', + name='rootTopic', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='blog.topic'), + ), + ] diff --git a/markdownblog/blog/models.py b/markdownblog/blog/models.py index 44d15ef..4763a4d 100644 --- a/markdownblog/blog/models.py +++ b/markdownblog/blog/models.py @@ -6,9 +6,13 @@ class Tag(models.Model): class Topic(models.Model): + + def __str__(self) -> str: + return str(self.name) + name = models.CharField(max_length=255) numbered = models.BooleanField(default=False) - rootTopic = models.ForeignKey('self', blank=True, on_delete=models.CASCADE) + rootTopic = models.ForeignKey('self', blank=True, null=True, on_delete=models.CASCADE) class Blogpost(models.Model): @@ -16,4 +20,4 @@ class Blogpost(models.Model): last_modified = models.DateTimeField(auto_now=True) title = models.CharField(max_length=255) tags = models.ManyToManyField(Tag) - topics = models.ForeignKey(Topic, blank=True, on_delete=models.CASCADE) + topics = models.ForeignKey(Topic, blank=True, null=True, on_delete=models.CASCADE) diff --git a/markdownblog/blog/tests.py b/markdownblog/blog/tests.py index 7ce503c..2e9cb5f 100644 --- a/markdownblog/blog/tests.py +++ b/markdownblog/blog/tests.py @@ -1,3 +1 @@ from django.test import TestCase - -# Create your tests here. diff --git a/markdownblog/blog/urls.py b/markdownblog/blog/urls.py index 36d7c8d..b60ddac 100644 --- a/markdownblog/blog/urls.py +++ b/markdownblog/blog/urls.py @@ -1,7 +1,8 @@ -from blog.views import viewblog, addpost +from blog.views import viewblog, addpost, createmocks from django.urls import path urlpatterns = [ - path('', viewblog), + path('', viewblog, name="index"), path('manage/add/', addpost, name='addpost'), + path('mock/topic//', createmocks, name='mock'), ] diff --git a/markdownblog/blog/views.py b/markdownblog/blog/views.py index 3572479..5bf37c5 100644 --- a/markdownblog/blog/views.py +++ b/markdownblog/blog/views.py @@ -1,10 +1,33 @@ -from django.shortcuts import render +import random + +from django.contrib.auth.decorators import login_required +from django.http import HttpResponse +from django.shortcuts import render, redirect +from blog.factories import TopicFactory + +from markdownblog import settings -# Create your views here. -def viewblog(request): - return render(request, 'blog/index.html') +def viewblog(request) -> HttpResponse: + return render(request, 'blog/index.html', {"debug": settings.DEBUG}) -def addpost(request): +@login_required +def addpost(request) -> HttpResponse: return render(request, 'blog/addpost.html') + + +def createmocks(request, n) -> HttpResponse: + topics = TopicFactory.create_batch(n) + + for topic in topics: + topic.save() + + while len(topics) > 1: + child = random.choice(topics) + topics.remove(child) + child.rootTopic = random.choice(topics) + child.save() + + print('Created ' + str(n) + ' mock topics.') + return redirect("index") diff --git a/markdownblog/markdownblog/static/addpost.css b/markdownblog/markdownblog/static/addpost.css new file mode 100644 index 0000000..8d538f5 --- /dev/null +++ b/markdownblog/markdownblog/static/addpost.css @@ -0,0 +1,4 @@ +.posttitle { + border: 1px solid #eaeaea; + border-radius: 5px; +} \ No newline at end of file diff --git a/markdownblog/markdownblog/templates/base/base.html b/markdownblog/markdownblog/templates/base/base.html index 5f5ce39..c0d37c5 100644 --- a/markdownblog/markdownblog/templates/base/base.html +++ b/markdownblog/markdownblog/templates/base/base.html @@ -24,6 +24,8 @@