Features: 1) Add suppress(NotRegistered) to handle unregistered translation models safely; 2) Enhance add_translations_fieldset logic for better error handling;

Fixes: 1) Add missing import for `NotRegistered` in `admin.py`;

Extra: 1) Minor refactoring of `add_translations_fieldset` function for readability;
This commit is contained in:
Egor Pavlovich Gorbunov 2025-06-23 15:33:35 +03:00
parent 2410f6dd3d
commit 080fcb2a25

View file

@ -1,3 +1,5 @@
from contextlib import suppress
from constance.admin import Config from constance.admin import Config
from constance.admin import ConstanceAdmin as BaseConstanceAdmin from constance.admin import ConstanceAdmin as BaseConstanceAdmin
from django.apps import apps from django.apps import apps
@ -6,7 +8,7 @@ from django.contrib.admin import ModelAdmin, TabularInline
from django.contrib.gis.admin import GISModelAdmin from django.contrib.gis.admin import GISModelAdmin
from django.db.models import Model from django.db.models import Model
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from modeltranslation.translator import translator from modeltranslation.translator import NotRegistered, translator
from modeltranslation.utils import get_translation_fields from modeltranslation.utils import get_translation_fields
from mptt.admin import DraggableMPTTAdmin from mptt.admin import DraggableMPTTAdmin
@ -43,16 +45,17 @@ class FieldsetsMixin:
def get_fieldsets(self, request, obj=None): def get_fieldsets(self, request, obj=None):
fieldsets = [] fieldsets = []
def add_translations_fieldset(fieldsets): def add_translations_fieldset(fss):
opts = translator.get_options_for_model(self.model) with suppress(NotRegistered):
translation_fields = [] transoptions = translator.get_options_for_model(self.model)
for orig in opts.local_fields: translation_fields = []
translation_fields += get_translation_fields(orig) for orig in transoptions.local_fields:
if translation_fields: translation_fields += get_translation_fields(orig)
fieldsets = list(fieldsets) + [ if translation_fields:
(_("translations"), {"fields": translation_fields}) fss = list(fss) + [
] (_("translations"), {"fields": translation_fields})
return fieldsets ]
return fss
if self.general_fields: if self.general_fields:
fieldsets.append((_("general"), {"fields": self.general_fields})) fieldsets.append((_("general"), {"fields": self.general_fields}))