can now also order topics
This commit is contained in:
parent
ead8a3a2ef
commit
eca6e5d716
8 changed files with 103 additions and 13 deletions
|
|
@ -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),
|
||||
),
|
||||
]
|
||||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue