From 3895034089bc9e4aa8eda2b78c9bd2e7de517bed Mon Sep 17 00:00:00 2001 From: Eliot Berriot <contact@eliotberriot.com> Date: Mon, 1 Oct 2018 21:56:52 +0200 Subject: [PATCH] Ensure we always use raw_ids for related fields in django's admin --- api/config/urls.py | 2 +- api/funkwhale_api/common/admin.py | 19 +++++++++++++++++++ api/funkwhale_api/favorites/admin.py | 2 +- api/funkwhale_api/federation/admin.py | 2 +- api/funkwhale_api/history/admin.py | 2 +- api/funkwhale_api/music/admin.py | 2 +- api/funkwhale_api/playlists/admin.py | 2 +- api/funkwhale_api/radios/admin.py | 2 +- api/funkwhale_api/users/admin.py | 2 +- 9 files changed, 27 insertions(+), 8 deletions(-) create mode 100644 api/funkwhale_api/common/admin.py diff --git a/api/config/urls.py b/api/config/urls.py index ba3b630d99..99fc32f1fc 100644 --- a/api/config/urls.py +++ b/api/config/urls.py @@ -5,7 +5,7 @@ from django.conf import settings from django.conf.urls import url from django.urls import include, path from django.conf.urls.static import static -from django.contrib import admin +from funkwhale_api.common import admin from django.views import defaults as default_views diff --git a/api/funkwhale_api/common/admin.py b/api/funkwhale_api/common/admin.py new file mode 100644 index 0000000000..4124a69b89 --- /dev/null +++ b/api/funkwhale_api/common/admin.py @@ -0,0 +1,19 @@ +from django.contrib.admin import register as initial_register, site, ModelAdmin # noqa +from django.db.models.fields.related import RelatedField + + +def register(model): + """ + To make the admin more performant, we ensure all the the relations + are listed under raw_id_fields + """ + + def decorator(modeladmin): + raw_id_fields = [] + for field in model._meta.fields: + if isinstance(field, RelatedField): + raw_id_fields.append(field.name) + setattr(modeladmin, "raw_id_fields", raw_id_fields) + return initial_register(model)(modeladmin) + + return decorator diff --git a/api/funkwhale_api/favorites/admin.py b/api/funkwhale_api/favorites/admin.py index f56980e8cc..05530b0c67 100644 --- a/api/funkwhale_api/favorites/admin.py +++ b/api/funkwhale_api/favorites/admin.py @@ -1,4 +1,4 @@ -from django.contrib import admin +from funkwhale_api.common import admin from . import models diff --git a/api/funkwhale_api/federation/admin.py b/api/funkwhale_api/federation/admin.py index 7be8ac89cc..98bc65247c 100644 --- a/api/funkwhale_api/federation/admin.py +++ b/api/funkwhale_api/federation/admin.py @@ -1,4 +1,4 @@ -from django.contrib import admin +from funkwhale_api.common import admin from . import models from . import tasks diff --git a/api/funkwhale_api/history/admin.py b/api/funkwhale_api/history/admin.py index cbc7f89dd4..6aac94d0a4 100644 --- a/api/funkwhale_api/history/admin.py +++ b/api/funkwhale_api/history/admin.py @@ -1,4 +1,4 @@ -from django.contrib import admin +from funkwhale_api.common import admin from . import models diff --git a/api/funkwhale_api/music/admin.py b/api/funkwhale_api/music/admin.py index 0cb4641808..8f9768857b 100644 --- a/api/funkwhale_api/music/admin.py +++ b/api/funkwhale_api/music/admin.py @@ -1,4 +1,4 @@ -from django.contrib import admin +from funkwhale_api.common import admin from . import models diff --git a/api/funkwhale_api/playlists/admin.py b/api/funkwhale_api/playlists/admin.py index 98ced232ee..0565352707 100644 --- a/api/funkwhale_api/playlists/admin.py +++ b/api/funkwhale_api/playlists/admin.py @@ -1,4 +1,4 @@ -from django.contrib import admin +from funkwhale_api.common import admin from . import models diff --git a/api/funkwhale_api/radios/admin.py b/api/funkwhale_api/radios/admin.py index 187950aeb2..0cfd5d9250 100644 --- a/api/funkwhale_api/radios/admin.py +++ b/api/funkwhale_api/radios/admin.py @@ -1,4 +1,4 @@ -from django.contrib import admin +from funkwhale_api.common import admin from . import models diff --git a/api/funkwhale_api/users/admin.py b/api/funkwhale_api/users/admin.py index 365db615ef..f7ee90c7e5 100644 --- a/api/funkwhale_api/users/admin.py +++ b/api/funkwhale_api/users/admin.py @@ -2,7 +2,7 @@ from __future__ import absolute_import, unicode_literals from django import forms -from django.contrib import admin +from funkwhale_api.common import admin from django.contrib.auth.admin import UserAdmin as AuthUserAdmin from django.contrib.auth.forms import UserChangeForm, UserCreationForm from django.utils.translation import ugettext_lazy as _ -- GitLab