implemented mocking topics

This commit is contained in:
CDaut 2022-06-01 16:54:47 +02:00 committed by CDaut
parent f3297544f9
commit dfb3b30271
12 changed files with 169 additions and 16 deletions

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -1,3 +1 @@
from django.test import TestCase
# Create your tests here.

View file

@ -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/<int:n>/', createmocks, name='mock'),
]

View file

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