12. Mai 2024

Dieser Artikel wird dich Schritt für Schritt durch die Aktualisierung von Juntagrico 1.5.x auf 1.6 führen.

Requirements anpassen

Wie üblich, musst du für die Aktualisierung deine requirements.txt anpassen.

juntagrico~=1.6.0

Aktualisiere auch die Versionen aller verwendeten Add-Ons auf eine mit 1.6 kompatiblen Version.

Django 4.2

Juntagrico macht mit 1.6 den Sprung vom nicht mehr unterstützten django 4.0 auf 4.2 LTS, welches noch bis April 2026 Updates erhalten wird.

Welche Änderungen django 4.2 mit sich bringt, erfährst du in dessen release notes. Die Anpassungen, die für eine typische juntagrico Installation nötig sind, werden im Folgenden beschrieben.

Wenn du postgres als Datenbank verwendest, ersetze im requirements.txt psycopg2 mit psycopg>=3.1.8.

Falls nicht schon geschehen, stellt auch sicher, dass du mindestens Version 22 von gunicorn verwendest, um eine kritische Sicherheitslücke (CVE-2024-1135) zu schliessen: gunicorn==22.0.0

Falls du in den settings.py STATICFILES_STORAGE gesetzt hattest, ersetze es mit der neuen Einstellung STORAGES und setze den bisherigen Wert unter staticfilesBACKEND.

Bisher:

STATICFILES_STORAGE = "django.contrib.staticfiles.storage.ManifestStaticFilesStorage"

Neu:

STORAGES = {
    "default": {
        "BACKEND": "django.core.files.storage.FileSystemStorage",
    },
    "staticfiles": {
        "BACKEND": "django.contrib.staticfiles.storage.ManifestStaticFilesStorage",
    },
}

Juntagrico 1.6

Anpassungen in der settings.py

Ab juntagrico 1.6 müssen deine eigene app und die addons bei den INSTALLED_APPS über 'juntagrico' stehen. Dabei ist zu beachten, dass Menüeinträge von addons in der gleichen Reihenfolge erscheinen werden, wie in INSTALLED_APPS. Beachte diesbezüglich auch die Anweisungen in den jeweiligen addons.

Ausserdem benötigt juntagrico 1.6 zwei neue apps: 'fontawesomefree' und 'import_export'.

Bisher (Beispiel):

INSTALLED_APPS = [
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.admin',
    'juntagrico',
    'juntagrico_addon1',  # deine juntagrico addons
    'impersonate',
    'crispy_forms',
    'adminsortable2',
    'meine_solawi',  # deine eigene app
    'polymorphic',
]

Neu (Beispiel):

INSTALLED_APPS = [
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.admin',
    'meine_solawi',  # deine eigene app
    'juntagrico_addon1',  # deine juntagrico addons
    'juntagrico',  # juntagrico muss neu nach den addons stehen
    'fontawesomefree',  # benötigt ab 1.6
    'import_export',  # benötigt ab 1.6
    'impersonate',
    'crispy_forms',
    'adminsortable2',
    'polymorphic',
]

Für die neue Exportfuntion benötigst du neu auch eine Einstellung, um festzulegen, welche Berechtigung nötig ist um Einträge zu exportieren. Mit der Einstellung ‚view‘ können alle, die z.B. Abos im Admin sehen können, diese auch exportieren, was in den meisten Fällen passen sollte:

IMPORT_EXPORT_EXPORT_PERMISSION_CODE = 'view'

Anstatt nur einer allgemeinen E-Mail-Adresse für den Kontakt kannst du mit der neuen CONTACTS Einstellung spezifische Adressen für verschiedene Bereiche einstellen. Dies ersetzt INFO_EMAIL. Folgende Anpassung ist darum minimal nötig:

bisher:

INFO_EMAIL = "info@meine-solawi.ch"

neu:

CONTACTS = {
    "general": "info@meine-solawi.ch"
}

Im Link zur Organisationswebseite der im Menü angezeigt wird, kann nun der Anzeigetext unabhängig von der URL eingestellt werden:

Die Einstellung verändert sich wie folgt:

SERVER_URL = "www.demo.org"

zu neu:

ORGANISATION_WEBSITE = {
    'name': "www.demo.org",
    'url': "https://www.demo.org"
}

Neu verwendet juntagrico die „/my/home“ url nicht mehr, sondern nutzt direkt die Startseite. Erste wird in einer zukünftigen Version entfernt. Ändere deshalb die bestehende Einstellung

LOGIN_REDIRECT_URL = "/my/home"

zu

LOGIN_REDIRECT_URL = "/"

Bereinigte URLs

Juntagrico enthält neu den Pfad zur Homepage selbst. Das heisst, du kannst folgende Zeile aus deiner urls.py entfernen:

path(r'', juntagrico.views.home),

Zeitzonen korrigieren

Django empfiehlt die Unterstützung für Zeitzonen grundsätzlich zu aktivieren, weil es sonst zu seltsamen Problemen kommen kann, insbesondere bei der Umstellung zur Sommerzeit und zurück.

Die nachträgliche Aktivierung war bisher relativ umständlich, weil dabei alle Einsatzzeiten plötzlich nicht mehr stimmten. Juntagrico 1.6 bringt eine Funktion mit, mit welcher die Umstellung nun einfach möglich ist.

Lies hier, wie du Zeitzonen aktivieren kannst: Folgt in Kürze

Modifikationen nachführen

Lies weiter. Falls du in deiner Instanz besondere Anpassungen gemacht hast, z.B. am Menü.

Ein neuer Ansatz für Anpassungen der Menüs (und anderer Templates)

Bisher konnten die Menüs für Mitglieder und Admins mit den Hooks register_admin_menu und register_admin_menu erweitert werden. Diese funktionieren noch, werden aber in einer zukünftigen Version entfernt. Stattdessen sollen die Menüs nun mit Template-Overrides angepasst werden.

Erstelle dazu ein template in deiner app templates/juntagrico/menu/user.html (oder admin.html für das Admin-Menü) mit folgendem Inhalt:

{% extends "juntagrico/menu/user.html" %}
{% load util %}
{% block extend %}
    HTML das hier steht, erscheint vor den Einträgen der Add-Ons
    {{ block.super }}
    HTML das hier steht, erscheint nach den Einträgen der Add-Ons.
{% endblock%}

Hierfür ist die Reihenfolge der INSTALLED_APPS entscheidend. Mit dem ersten „extends“ wird das Template mit dem gleichen Namen von der „nächsten App in der Liste“ geladen, also zuerst von den Addons, falls diese das Menü auch ändern. Diese laden wiederum dann das Template von juntagrico. der {% block extend %} gibt an, dass der Block mit diesem Namen vom Haupt-Template überschrieben werden soll. In Juntagrico selbst ist der Block leer, aber er könnte von den Add-Ons schon befüllt sein. Deshalb fügen wir den bisherigen Inhalt des Blocks mit {{ block.super }} erneut ein.

Andere Hooks

Folgende hooks, welche primär für addons gedacht sind, wurden entfernt:

register_show_admin_menu_method: Stattdessen musst du neu nur Sicherstellen, dass du dem Menü keinerlei HTML hinzufügst, wenn du nichts im Admin-Menü anzeigst. Juntagrico blendet das Menü dann automatisch aus.

register_sub_overview und register_sub_change: Belasse diese für die alte Abo-Übersicht. Die neue Übersicht kannst du mit Template-Overrides anpassen, ähnlich wie die Menüs oben.

Nächste Schritte

Nun kannst du deine Instanz wie gehabt deployen. Vergiss nicht die Migrationen anzuwenden. Im Juntagrico-Hosting passiert das automatisch beim Redeploy.

Lies hier weiter, welche neuen Funktionen Juntagrico 1.6 mitbringt und wie du diese aktivierst.