diff --git a/gawa/blog/admin.py b/gawa/blog/admin.py index 96fe54e..3a87df2 100644 --- a/gawa/blog/admin.py +++ b/gawa/blog/admin.py @@ -12,3 +12,5 @@ class BlogPostAdmin(admin.ModelAdmin): """ The admin model for BlogPost """ + list_display = ["title_en", "subtitle_en", "title_de", "subtitle_de", "date", "category", "suburl"] + date_hierarchy = "date" diff --git a/gawa/blog/migrations/0001_initial.py b/gawa/blog/migrations/0001_initial.py index 8981bef..b5a62a1 100644 --- a/gawa/blog/migrations/0001_initial.py +++ b/gawa/blog/migrations/0001_initial.py @@ -1,31 +1,12 @@ -# Generated by Django 3.2.19 on 2023-05-31 20:54 +# Generated by Django 3.2.19 on 2023-06-03 12:03 -from django.db import migrations, models +from django.db import migrations class Migration(migrations.Migration): - initial = True - dependencies = [ - ('start', '0002_auto_20230531_2254'), ] operations = [ - migrations.CreateModel( - name='BlogPost', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(max_length=50)), - ('subtitle', models.CharField(max_length=50)), - ('desc', models.CharField(max_length=250, unique=True)), - ('body', models.TextField()), - ('date', models.DateField(blank=True)), - ('slug', models.SlugField()), - ('keywords', models.ManyToManyField(to='start.Keyword')), - ], - options={ - 'abstract': False, - }, - ), ] diff --git a/gawa/blog/migrations/0002_auto_20230602_1200.py b/gawa/blog/migrations/0002_auto_20230602_1200.py deleted file mode 100644 index c663795..0000000 --- a/gawa/blog/migrations/0002_auto_20230602_1200.py +++ /dev/null @@ -1,36 +0,0 @@ -# Generated by Django 3.2.19 on 2023-06-02 10:00 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('start', '0002_auto_20230531_2254'), - ('blog', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='Category', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(max_length=50)), - ('subtitle', models.CharField(max_length=50)), - ('desc', models.CharField(max_length=250, unique=True)), - ('date', models.DateField(blank=True)), - ('name', models.CharField(max_length=50)), - ('slug', models.SlugField()), - ('keywords', models.ManyToManyField(to='start.Keyword')), - ], - options={ - 'abstract': False, - }, - ), - migrations.AddField( - model_name='blogpost', - name='category', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='blog.category'), - ), - ] diff --git a/gawa/blog/migrations/0002_blogpost_category.py b/gawa/blog/migrations/0002_blogpost_category.py new file mode 100644 index 0000000..d4c110c --- /dev/null +++ b/gawa/blog/migrations/0002_blogpost_category.py @@ -0,0 +1,35 @@ +# Generated by Django 3.2.19 on 2023-06-03 12:03 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('start', '0002_keyword_searchable_staticsite'), + ('blog', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Category', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=50)), + ('slug', models.SlugField()), + ], + ), + migrations.CreateModel( + name='BlogPost', + fields=[ + ('searchable_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='start.searchable')), + ('body', models.TextField()), + ('thumbnail', models.ImageField(blank=True, upload_to='')), + ('category', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='blog.category')), + ], + bases=('start.searchable',), + ), + ] diff --git a/gawa/blog/migrations/0003_auto_20230603_0009.py b/gawa/blog/migrations/0003_auto_20230603_0009.py deleted file mode 100644 index f97b688..0000000 --- a/gawa/blog/migrations/0003_auto_20230603_0009.py +++ /dev/null @@ -1,38 +0,0 @@ -# Generated by Django 3.2.19 on 2023-06-02 22:09 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('blog', '0002_auto_20230602_1200'), - ] - - operations = [ - migrations.RemoveField( - model_name='category', - name='date', - ), - migrations.RemoveField( - model_name='category', - name='desc', - ), - migrations.RemoveField( - model_name='category', - name='keywords', - ), - migrations.RemoveField( - model_name='category', - name='subtitle', - ), - migrations.RemoveField( - model_name='category', - name='title', - ), - migrations.AddField( - model_name='blogpost', - name='thumbnail', - field=models.ImageField(blank=True, upload_to=''), - ), - ] diff --git a/gawa/blog/models.py b/gawa/blog/models.py index 5cf0ab3..f1e5761 100644 --- a/gawa/blog/models.py +++ b/gawa/blog/models.py @@ -1,6 +1,6 @@ from django.db import models -from start.models import AbstractSearchable +from start.models import Searchable class Category(models.Model): """ @@ -9,15 +9,10 @@ class Category(models.Model): name = models.CharField(max_length=50) slug = models.SlugField() -class BlogPost(AbstractSearchable): +class BlogPost(Searchable): """ Should contain a blogpost """ - title = models.CharField(max_length=50) - subtitle = models.CharField(max_length=50) - desc = models.CharField(max_length=250, unique=True) body = models.TextField() - date = models.DateField(blank=True) category = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True) thumbnail = models.ImageField(blank=True) - slug = models.SlugField() diff --git a/gawa/start/admin.py b/gawa/start/admin.py index 8c38f3f..4a31d70 100644 --- a/gawa/start/admin.py +++ b/gawa/start/admin.py @@ -1,3 +1,18 @@ from django.contrib import admin +from django.db.models import CASCADE, AutoField, OneToOneField +from django.views.generic import View +from .models import * -# Register your models here. +@admin.register(Keyword) +class KeywordAdmin(admin.ModelAdmin): + """ + Admin Interface for Keyword + """ + list_display = ["text_en", "text_de"] + +@admin.register(StaticSite) +class StaticSiteAdmin(admin.ModelAdmin): + """ + Admin Interface for StaticSite + """ + list_display = ["title_en", "subtitle_en", "title_de", "subtitle_de", "suburl"] diff --git a/gawa/start/migrations/0001_initial.py b/gawa/start/migrations/0001_initial.py index f414316..b5a62a1 100644 --- a/gawa/start/migrations/0001_initial.py +++ b/gawa/start/migrations/0001_initial.py @@ -1,25 +1,12 @@ -# Generated by Django 3.2.19 on 2023-05-30 17:08 +# Generated by Django 3.2.19 on 2023-06-03 12:03 -from django.db import migrations, models +from django.db import migrations class Migration(migrations.Migration): - initial = True - dependencies = [ ] operations = [ - migrations.CreateModel( - name='MainSearchEntry', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(max_length=50)), - ('subtitle', models.CharField(max_length=50)), - ('desc', models.CharField(max_length=250, unique=True)), - ('date', models.DateField(blank=True)), - ('link', models.URLField()), - ], - ), ] diff --git a/gawa/start/migrations/0002_auto_20230531_2254.py b/gawa/start/migrations/0002_auto_20230531_2254.py deleted file mode 100644 index 694756f..0000000 --- a/gawa/start/migrations/0002_auto_20230531_2254.py +++ /dev/null @@ -1,37 +0,0 @@ -# Generated by Django 3.2.19 on 2023-05-31 20:54 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('start', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='Keyword', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('text', models.CharField(max_length=40)), - ], - ), - migrations.CreateModel( - name='StaticSite', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(max_length=50)), - ('subtitle', models.CharField(max_length=50)), - ('desc', models.CharField(max_length=250, unique=True)), - ('date', models.DateField(blank=True)), - ('keywords', models.ManyToManyField(to='start.Keyword')), - ], - options={ - 'abstract': False, - }, - ), - migrations.DeleteModel( - name='MainSearchEntry', - ), - ] diff --git a/gawa/start/migrations/0002_keyword_searchable_staticsite.py b/gawa/start/migrations/0002_keyword_searchable_staticsite.py new file mode 100644 index 0000000..77e2dae --- /dev/null +++ b/gawa/start/migrations/0002_keyword_searchable_staticsite.py @@ -0,0 +1,46 @@ +# Generated by Django 3.2.19 on 2023-06-03 12:03 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('start', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Keyword', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('text_de', models.CharField(max_length=40)), + ('text_en', models.CharField(max_length=40)), + ], + ), + migrations.CreateModel( + name='Searchable', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title_de', models.CharField(default='Titel DE', max_length=50)), + ('title_en', models.CharField(default='title en', max_length=50)), + ('subtitle_de', models.CharField(blank=True, max_length=50)), + ('subtitle_en', models.CharField(blank=True, max_length=50)), + ('desc_de', models.CharField(default='Beschreibung DE', max_length=250, unique=True)), + ('desc_en', models.CharField(default='Description EN', max_length=250, unique=True)), + ('date', models.DateField(blank=True, null=True)), + ('suburl', models.CharField(blank=True, max_length=200, null=True)), + ('keywords', models.ManyToManyField(to='start.Keyword')), + ], + ), + migrations.CreateModel( + name='StaticSite', + fields=[ + ('searchable_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='start.searchable')), + ], + bases=('start.searchable',), + ), + ] diff --git a/gawa/start/models.py b/gawa/start/models.py index b9d76a0..3037556 100644 --- a/gawa/start/models.py +++ b/gawa/start/models.py @@ -8,25 +8,26 @@ class Keyword(models.Model): """ this is the model that should contain searchable keywords """ - text = models.CharField(max_length=40) + text_de = models.CharField(max_length=40) + text_en = models.CharField(max_length=40) -class AbstractSearchable(models.Model): +class Searchable(models.Model): """ Abstract class for any model that should be searchable. This model will be searched for by the searchbox that is in every upper part of the website. - """ - title = models.CharField(max_length=50) - subtitle = models.CharField(max_length=50) - desc = models.CharField(max_length=250, unique=True) - # may be empty/blank for some entries - date = models.DateField(blank=True) - keywords = models.ManyToManyField(Keyword) - class Meta: - """ - AbstractSearchable is an abstract model - """ - abstract = True + This class is not a real abstract class, I need to query it in the main search, so thats impossible + """ + title_de = models.CharField(max_length=50, default="Titel DE") + title_en = models.CharField(max_length=50, default="title en") + subtitle_de = models.CharField(max_length=50, blank=True) + subtitle_en = models.CharField(max_length=50, blank=True) + desc_de = models.CharField(max_length=250, unique=True, default="Beschreibung DE") + desc_en = models.CharField(max_length=250, unique=True, default="Description EN") + # may be empty/blank for some entries + date = models.DateField(blank=True, null=True) + keywords = models.ManyToManyField(Keyword) + suburl = models.CharField(max_length=200, blank=True, null=True) @classmethod def regenerate_all_entries(cls): @@ -35,7 +36,7 @@ class AbstractSearchable(models.Model): """ raise NotImplementedError -class StaticSite(AbstractSearchable): +class StaticSite(Searchable): """ This model represents any static site, such as start:index, that should show up in search. diff --git a/gawa/start/templates/errors/bad_request.html b/gawa/start/templates/errors/bad_request.html index c380aea..514687d 100644 --- a/gawa/start/templates/errors/bad_request.html +++ b/gawa/start/templates/errors/bad_request.html @@ -1,4 +1,4 @@ -{% extends 'start/base.html' %} +{% extends 'base.html' %} {% load i18n %} {% get_current_language as LANGUAGE_CODE %} {% block languagecode %}{{ LANGUAGE_CODE }}{% endblock languagecode %} @@ -8,4 +8,8 @@
{% translate "You fucked up" %}
+