From 1c119620e9afff986dd843718df87a45be72d93f Mon Sep 17 00:00:00 2001
From: "N. Geisler" <ngeisler@fachschaft.informatik.tu-darmstadt.de>
Date: Sun, 10 May 2020 21:31:46 +0200
Subject: [PATCH] preselect next active event when creating objects as admin

---
 AKModel/admin.py  | 49 +++++++++++++++++++++++++++++++++++++++++++++++
 AKModel/models.py |  8 ++++++++
 2 files changed, 57 insertions(+)

diff --git a/AKModel/admin.py b/AKModel/admin.py
index 815521df..301b9109 100644
--- a/AKModel/admin.py
+++ b/AKModel/admin.py
@@ -35,6 +35,13 @@ class AKOwnerAdmin(admin.ModelAdmin):
     list_editable = []
     ordering = ['name']
 
+    def formfield_for_foreignkey(self, db_field, request, **kwargs):
+        if db_field.name == 'event':
+            kwargs['initial'] = Event.get_next_active()
+        return super(AKOwnerAdmin, self).formfield_for_foreignkey(
+            db_field, request, **kwargs
+        )
+
 
 @admin.register(AKCategory)
 class AKCategoryAdmin(admin.ModelAdmin):
@@ -44,6 +51,13 @@ class AKCategoryAdmin(admin.ModelAdmin):
     list_editable = ['color']
     ordering = ['name']
 
+    def formfield_for_foreignkey(self, db_field, request, **kwargs):
+        if db_field.name == 'event':
+            kwargs['initial'] = Event.get_next_active()
+        return super(AKCategoryAdmin, self).formfield_for_foreignkey(
+            db_field, request, **kwargs
+        )
+
 
 @admin.register(AKTrack)
 class AKTrackAdmin(admin.ModelAdmin):
@@ -53,6 +67,13 @@ class AKTrackAdmin(admin.ModelAdmin):
     list_editable = ['color']
     ordering = ['name']
 
+    def formfield_for_foreignkey(self, db_field, request, **kwargs):
+        if db_field.name == 'event':
+            kwargs['initial'] = Event.get_next_active()
+        return super(AKTrackAdmin, self).formfield_for_foreignkey(
+            db_field, request, **kwargs
+        )
+
 
 @admin.register(AKTag)
 class AKTagAdmin(admin.ModelAdmin):
@@ -71,6 +92,13 @@ class AKRequirementAdmin(admin.ModelAdmin):
     list_editable = []
     ordering = ['name']
 
+    def formfield_for_foreignkey(self, db_field, request, **kwargs):
+        if db_field.name == 'event':
+            kwargs['initial'] = Event.get_next_active()
+        return super(AKRequirementAdmin, self).formfield_for_foreignkey(
+            db_field, request, **kwargs
+        )
+
 
 class WishFilter(SimpleListFilter):
     title = _("Wish")  # a label for our filter
@@ -113,6 +141,13 @@ class AKAdmin(admin.ModelAdmin):
 
     is_wish.boolean = True
 
+    def formfield_for_foreignkey(self, db_field, request, **kwargs):
+        if db_field.name == 'event':
+            kwargs['initial'] = Event.get_next_active()
+        return super(AKAdmin, self).formfield_for_foreignkey(
+            db_field, request, **kwargs
+        )
+
 
 @admin.register(Room)
 class RoomAdmin(admin.ModelAdmin):
@@ -122,6 +157,13 @@ class RoomAdmin(admin.ModelAdmin):
     list_editable = []
     ordering = ['building', 'name']
 
+    def formfield_for_foreignkey(self, db_field, request, **kwargs):
+        if db_field.name == 'event':
+            kwargs['initial'] = Event.get_next_active()
+        return super(RoomAdmin, self).formfield_for_foreignkey(
+            db_field, request, **kwargs
+        )
+
 
 @admin.register(AKSlot)
 class AKSlotAdmin(admin.ModelAdmin):
@@ -142,6 +184,13 @@ class AKSlotAdmin(admin.ModelAdmin):
             timezone.activate("UTC")
         return super().get_form(request, obj, change, **kwargs)
 
+    def formfield_for_foreignkey(self, db_field, request, **kwargs):
+        if db_field.name == 'event':
+            kwargs['initial'] = Event.get_next_active()
+        return super(AKSlotAdmin, self).formfield_for_foreignkey(
+            db_field, request, **kwargs
+        )
+
 
 @admin.register(Availability)
 class AvailabilityAdmin(admin.ModelAdmin):
diff --git a/AKModel/models.py b/AKModel/models.py
index 6040e0e1..8ca7fba4 100644
--- a/AKModel/models.py
+++ b/AKModel/models.py
@@ -45,6 +45,14 @@ class Event(models.Model):
     def get_by_slug(slug):
         return Event.objects.get(slug=slug)
 
+    @staticmethod
+    def get_next_active():
+        active_events = Event.objects.filter(active=True).order_by('start')
+        if not active_events:
+            return None
+        else:
+            return active_events[0]
+
 
 class AKOwner(models.Model):
     """ An AKOwner describes the person organizing/holding an AK.
-- 
GitLab