From fca06b0101ac5b37265224c05347711aac876748 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=B6rn=20Menne?= Date: Tue, 11 Feb 2025 15:20:54 +0100 Subject: [PATCH] Add inlines for usermanagement --- georeport/admin.py | 58 ++++++++++++++++++++++++++++++++++++--------- georeport/models.py | 5 ++-- georeport/views.py | 1 - 3 files changed, 49 insertions(+), 15 deletions(-) diff --git a/georeport/admin.py b/georeport/admin.py index a23b035..046a082 100644 --- a/georeport/admin.py +++ b/georeport/admin.py @@ -1,17 +1,18 @@ # Copyright: (c) 2025, Jörn Menne # GNU General Public License v3.0 (see LICSENE or https://www.gnu.org/license/gpl-3.0.md) -from django.conf.global_settings import DEFAULT_FROM_EMAIL -from django.contrib import admin, messages +from base64 import urlsafe_b64encode from typing import override -from django.utils.translation import ngettext -from georeport.models import Category, Report -from django.conf import settings + from Crypto.Cipher import ChaCha20 -from base64 import urlsafe_b64encode -from django.shortcuts import reverse +from django.conf import settings +from django.contrib import admin, messages +from django.contrib.auth.admin import GroupAdmin, UserAdmin +from django.contrib.auth.models import Group, User from django.core.mail import send_mail +from django.shortcuts import reverse +from django.utils.translation import ngettext -# TODO: CategoryAdmin +from georeport.models import Category, Report class CategoryInline(admin.TabularInline): @@ -25,6 +26,26 @@ class CategoryInline(admin.TabularInline): return False +class CategoryUserInline(admin.TabularInline): + model = Category.users.through + extra = 0 + can_delete = False + + @override + def has_change_permission(self, request, obj=None): + return False + + +class CategoryGroupInline(admin.TabularInline): + model = Category.groups.through + extra = 0 + can_delete = False + + @override + def has_change_permission(self, request, obj=None): + return False + + @admin.register(Category) class CategoryAdmin(admin.ModelAdmin): """ @@ -32,8 +53,8 @@ class CategoryAdmin(admin.ModelAdmin): the admin site, such that the model can be edited on there. """ - # exclude = ["users", "groups"] - inlines = [CategoryInline] + exclude = ["users", "groups"] + inlines = [CategoryInline, CategoryGroupInline, CategoryUserInline] search_fields = ["name"] # TODO: Prevent circles while creating groups @@ -84,7 +105,6 @@ def getAllowedUsers(category): return qs -# TODO: ReportAdmin @admin.register(Report) class ReportAdmin(admin.ModelAdmin): exclude = [ @@ -191,3 +211,19 @@ def send_close_link(report): recipient_list=recipient_list, fail_silently=True, ) + + +admin.site.unregister(User) +admin.site.unregister(Group) + + +@admin.register(User) +class MyUserAdmin(UserAdmin): + exlude = None + inlines = [CategoryUserInline] + + +@admin.register(Group) +class MyGroupAdmin(GroupAdmin): + exlude = None + inlines = [CategoryGroupInline] diff --git a/georeport/models.py b/georeport/models.py index c52b70e..d38b9d7 100644 --- a/georeport/models.py +++ b/georeport/models.py @@ -69,8 +69,7 @@ class Report(models.Model): title = models.CharField(max_length=100) description = models.TextField(blank=True, null=True) email = models.EmailField() - # TODO: Images - + # TODO: Images NEXT # Fields set at creation state = models.IntegerField(choices=State, default=0) # type: ignore Correct type can not be dtermined _oldState = models.IntegerField(choices=State, default=0) # type: ignore Correct type can not be dtermined @@ -92,4 +91,4 @@ class Report(models.Model): return str(self.title) -# TODO: Image +# TODO: Image NEXT diff --git a/georeport/views.py b/georeport/views.py index ee2047a..365e37a 100644 --- a/georeport/views.py +++ b/georeport/views.py @@ -132,7 +132,6 @@ def create_report_view(request): send_creation_confirmation(report) send_creation_mail(report) - # TODO: Send confirmation-Mails return redirect("georeport:index") return render( -- 2.39.5