From eca6e5d71636cf6e32225eea320488e76107f0eb Mon Sep 17 00:00:00 2001 From: CDaut Date: Sat, 18 Jun 2022 12:18:44 +0200 Subject: [PATCH] can now also order topics --- ...t_title_alter_tag_name_alter_topic_name.py | 28 +++++++++++++++++++ markdownblog/blog/models.py | 10 +++++-- markdownblog/blog/views.py | 28 ++++++++++++++----- .../markdownblog/static/order_style.css | 8 ++++++ .../markdownblog/templates/base/base.html | 2 +- .../markdownblog/templates/blog/addpost.html | 9 +++++- .../markdownblog/templates/blog/order.html | 20 ++++++++++++- .../templates/blog/tree_view_template.html | 11 ++++++++ 8 files changed, 103 insertions(+), 13 deletions(-) create mode 100644 markdownblog/blog/migrations/0002_alter_blogpost_title_alter_tag_name_alter_topic_name.py diff --git a/markdownblog/blog/migrations/0002_alter_blogpost_title_alter_tag_name_alter_topic_name.py b/markdownblog/blog/migrations/0002_alter_blogpost_title_alter_tag_name_alter_topic_name.py new file mode 100644 index 0000000..e83b9fd --- /dev/null +++ b/markdownblog/blog/migrations/0002_alter_blogpost_title_alter_tag_name_alter_topic_name.py @@ -0,0 +1,28 @@ +# Generated by Django 4.0.5 on 2022-06-18 08:15 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('blog', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='blogpost', + name='title', + field=models.CharField(max_length=255, unique=True), + ), + migrations.AlterField( + model_name='tag', + name='name', + field=models.CharField(max_length=255, unique=True), + ), + migrations.AlterField( + model_name='topic', + name='name', + field=models.CharField(max_length=255, unique=True), + ), + ] diff --git a/markdownblog/blog/models.py b/markdownblog/blog/models.py index 536332f..11bbeaa 100644 --- a/markdownblog/blog/models.py +++ b/markdownblog/blog/models.py @@ -2,7 +2,11 @@ from django.db import models class Tag(models.Model): - name = models.CharField(max_length=255) + + def __str__(self) -> str: + return str(self.name) + + name = models.CharField(max_length=255, unique=True) class Topic(models.Model): @@ -10,7 +14,7 @@ class Topic(models.Model): def __str__(self) -> str: return str(self.name) - name = models.CharField(max_length=255) + name = models.CharField(max_length=255, unique=True) numbered = models.BooleanField(default=False) rootTopic = models.ForeignKey('self', blank=True, null=True, on_delete=models.CASCADE) @@ -22,7 +26,7 @@ class Blogpost(models.Model): created = models.DateTimeField(auto_now_add=True) last_modified = models.DateTimeField(auto_now=True) - title = models.CharField(max_length=255) + title = models.CharField(max_length=255, unique=True) tags = models.ManyToManyField(Tag) topic = models.ForeignKey(Topic, blank=True, null=True, on_delete=models.CASCADE) mdfile = models.CharField(max_length=255) diff --git a/markdownblog/blog/views.py b/markdownblog/blog/views.py index 9e8ba72..aa5fbd8 100644 --- a/markdownblog/blog/views.py +++ b/markdownblog/blog/views.py @@ -2,6 +2,7 @@ import os import random from django.contrib.auth.decorators import login_required +from django.db import IntegrityError from django.http import HttpResponse from django.shortcuts import render, redirect from blog.factories import TopicFactory @@ -21,17 +22,24 @@ def order(request): if request.method == "POST": root_id = int(request.POST['rootID']) if request.POST['rootID'] != 'root_list' else None child_id = int(request.POST['childID']) + objtype = request.POST['relinkType'] - child_topic = Topic.objects.get(pk=child_id) - child_topic.rootTopic = Topic.objects.get(pk=root_id) if root_id is not None else None - child_topic.save() + if objtype == 'topic': + child_topic = Topic.objects.get(pk=child_id) + child_topic.rootTopic = Topic.objects.get(pk=root_id) if root_id is not None else None + child_topic.save() + elif objtype == 'post': + post = Blogpost.objects.get(pk=child_id) + post.topic = Topic.objects.get(pk=root_id) if root_id is not None else None + post.save() - context = {'roottopics': Topic.objects.all().filter(rootTopic=None)} + context = {'roottopics': Topic.objects.all().filter(rootTopic=None), 'allposts': Blogpost.objects.all()} return render(request, 'blog/order.html', context) @login_required def addpost(request) -> HttpResponse: + context = {'alltopics': Topic.objects.all().order_by('name').values(), 'markdown': ''} if request.method == 'POST': title = request.POST['title'] markdown = request.POST['markdown'] @@ -46,15 +54,21 @@ def addpost(request) -> HttpResponse: topicid = request.POST['topic'] topic = None if topicid == "No topic" else Topic.objects.get(pk=topicid) - new_post = Blogpost.objects.create(title=title, topic=topic) - new_post.tags.set(tags) + try: + new_post = Blogpost.objects.create(title=title, topic=topic) + new_post.tags.set(tags) + except IntegrityError: + context = {'alltopics': Topic.objects.all().order_by('name').values(), + 'error': 'Blogpost titles need to be unique. No post created.', + "markdown": markdown} + return render(request, 'blog/addpost.html', context) filepath = os.path.join(os.environ.get("MD_FILE_PATH"), title + ".md") with open(filepath, "w+") as mdfile: mdfile.write(markdown) mdfile.close() + context['error'] = "Post " + title + " created." - context = {'alltopics': Topic.objects.all().order_by('name').values()} return render(request, 'blog/addpost.html', context) diff --git a/markdownblog/markdownblog/static/order_style.css b/markdownblog/markdownblog/static/order_style.css index defd8ee..b27ec3f 100644 --- a/markdownblog/markdownblog/static/order_style.css +++ b/markdownblog/markdownblog/static/order_style.css @@ -8,4 +8,12 @@ -moz-box-shadow: 3px 3px 11px 4px rgb(231, 231, 231); padding: 0.5em 0.5em 0.5em 1em; margin: 0.5em 0.5em 0.5em 0; +} + +#root_list { + box-shadow: 3px 3px 11px 4px rgb(231, 231, 231); + -webkit-box-shadow: 3px 3px 11px 4px rgb(231, 231, 231); + -moz-box-shadow: 3px 3px 11px 4px rgb(231, 231, 231); + padding: 0.5em 0.5em 0.5em 1em; + margin: 2em 0.5em 0.5em 0; } \ No newline at end of file diff --git a/markdownblog/markdownblog/templates/base/base.html b/markdownblog/markdownblog/templates/base/base.html index b6accfb..6b2cff3 100644 --- a/markdownblog/markdownblog/templates/base/base.html +++ b/markdownblog/markdownblog/templates/base/base.html @@ -15,7 +15,7 @@
-