can now also order topics

This commit is contained in:
CDaut 2022-06-18 12:18:44 +02:00 committed by CDaut
parent ead8a3a2ef
commit eca6e5d716
8 changed files with 103 additions and 13 deletions

View file

@ -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),
),
]

View file

@ -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)

View file

@ -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)