From df5d2251e57d3ee4eaa23ff10b73d3443f41c02e Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=B6rn=20Menne?= Date: Mon, 6 Jan 2025 15:03:30 +0100 Subject: [PATCH] Add recursive categories. From is currently not working correctly --- georeport/forms.py | 2 +- georeport/migrations/0005_category_parent.py | 19 +++++++++++++++++++ georeport/models.py | 10 ++++++++++ georeport/templates/georeport/category.html | 11 +++++++++++ georeport/views.py | 9 +++++---- 5 files changed, 46 insertions(+), 5 deletions(-) create mode 100644 georeport/migrations/0005_category_parent.py diff --git a/georeport/forms.py b/georeport/forms.py index 3fe7bde..9d20862 100644 --- a/georeport/forms.py +++ b/georeport/forms.py @@ -6,4 +6,4 @@ from .models import Report class ReportForm(ModelForm): class Meta: model = Report - fields = ["title", "description", "latitude", "longitude", "category", "email"] + fields = ["title", "description", "latitude", "longitude", "email", "category"] diff --git a/georeport/migrations/0005_category_parent.py b/georeport/migrations/0005_category_parent.py new file mode 100644 index 0000000..95fdee8 --- /dev/null +++ b/georeport/migrations/0005_category_parent.py @@ -0,0 +1,19 @@ +# Generated by Django 5.1.4 on 2025-01-06 10:04 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('georeport', '0004_report_email_report_published'), + ] + + operations = [ + migrations.AddField( + model_name='category', + name='parent', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='children', to='georeport.category'), + ), + ] diff --git a/georeport/models.py b/georeport/models.py index 0674d1a..73f28df 100644 --- a/georeport/models.py +++ b/georeport/models.py @@ -6,6 +6,16 @@ from django.db import models class Category(models.Model): name = models.CharField(max_length=100) + parent = models.ForeignKey( + "self", + on_delete=models.CASCADE, + related_name="children", + null=True, + blank=True, + ) + + class Meta: + verbose_name_plural = "Categories" def __str__(self): return self.name diff --git a/georeport/templates/georeport/category.html b/georeport/templates/georeport/category.html index bc69705..e9986a1 100644 --- a/georeport/templates/georeport/category.html +++ b/georeport/templates/georeport/category.html @@ -5,5 +5,16 @@ {% block body %}

Categoriy {{ category.id }}

Name: {{ category.name }}

+ {% if category.parent %} +

Supercategory:{{category.parent}}

+ {%endif%} + {% if category.children.exists %} +

Subcategories:

+ + {% endif %} Back {% endblock %} diff --git a/georeport/views.py b/georeport/views.py index 083b39c..829af8a 100644 --- a/georeport/views.py +++ b/georeport/views.py @@ -1,10 +1,11 @@ -from django.shortcuts import get_object_or_404, render, redirect -from django.http import HttpResponseForbidden -# Create your views here. +from django.http import HttpResponseForbidden, JsonResponse +from django.shortcuts import get_object_or_404, redirect, render -from .models import Category, Report from .forms import ReportForm +# Create your views here. +from .models import Category, Report + def index(request): reports = Report.objects.all() -- 2.39.5