implemented mocking topics
This commit is contained in:
parent
f3297544f9
commit
dfb3b30271
12 changed files with 169 additions and 16 deletions
|
|
@ -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)
|
||||
|
|
|
|||
11
markdownblog/blog/factories.py
Normal file
11
markdownblog/blog/factories.py
Normal 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
|
||||
42
markdownblog/blog/migrations/0001_initial.py
Normal file
42
markdownblog/blog/migrations/0001_initial.py
Normal 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')),
|
||||
],
|
||||
),
|
||||
]
|
||||
|
|
@ -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'),
|
||||
),
|
||||
]
|
||||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -1,3 +1 @@
|
|||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
||||
|
|
|
|||
|
|
@ -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'),
|
||||
]
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue