feat(django_nepkit): improve nil handling for ne flag in admin mixin

Clarify that None means “no opinion” versus False, and adjust fallback logic to use the project default when a field lacks the ne attribute.
This commit is contained in:
sankalp committed 2026-06-06 21:35:29 +05:45
1 parent 0268bcfe98
commit 37cd71f896
2 files changed
+21 -10

No files matched your search

+14 -6
View File
@@ -198,22 +198,28 @@ class NepaliAdminMixin:
"""Provides date formatting helpers for Admin classes."""
def _get_field_ne_setting(self, field_name):
"""Return the field's ``ne`` flag, or ``None`` if the field has none.
``None`` distinguishes "field has no opinion" from an explicit
``ne=False`` (English), which the caller can use to fall back to
the project default without overwriting a field-level override.
"""
if not hasattr(self, "model"):
return False
return None
try:
field = self.model._meta.get_field(field_name)
if hasattr(field, "ne"):
return field.ne
except (FieldDoesNotExist, AttributeError):
return False
return False
return None
return None
def format_nepali_date(
self, date_value, format_string="%B %d, %Y", ne=None, field_name=None
):
if ne is None and field_name:
ne = self._get_field_ne_setting(field_name)
elif ne is None:
if ne is None:
ne = nepkit_settings.DEFAULT_LANGUAGE == "ne"
return format_nepali_date(date_value, format_string, ne=ne)
@@ -226,7 +232,7 @@ class NepaliAdminMixin:
):
if ne is None and field_name:
ne = self._get_field_ne_setting(field_name)
elif ne is None:
if ne is None:
ne = nepkit_settings.DEFAULT_LANGUAGE == "ne"
return format_nepali_datetime(datetime_value, format_string, ne=ne)
@@ -308,7 +314,9 @@ class NepaliModelAdmin(NepaliAdminMixin, admin.ModelAdmin):
if val is None:
return self.get_empty_value_display()
ne = self._get_field_ne_setting(field_name)
if ne is False:
if ne is None:
# Field has no ``ne`` attribute (e.g. plain ``TimeField``)
# — fall back to the project default.
ne = nepkit_settings.DEFAULT_LANGUAGE == "ne"
return format_nepali_time_admin(val, ne=ne)
+7 -4
View File
@@ -3,11 +3,16 @@ from datetime import date as python_date
from django import forms
from django.utils.translation import gettext_lazy as _
from nepali.datetime import nepalidate
from nepali.exceptions import FormatNotMatchException
from django_nepkit.utils import try_parse_nepali_date
from django_nepkit.utils import BS_DATE_FORMAT, try_parse_nepali_date
from django_nepkit.validators import validate_nepali_phone_number
from django_nepkit.widgets import NepaliDatePickerWidget
# Anything ``try_parse_nepali_date`` (or ``str(value)`` coercion) might
# raise that we want to translate into a user-friendly ``ValidationError``.
_PARSE_ERRORS = (ValueError, TypeError, FormatNotMatchException)
class NepaliDateFormField(forms.DateField):
"""A form field for entering Nepali dates."""
@@ -32,9 +37,7 @@ class NepaliDateFormField(forms.DateField):
if parsed is not None:
return parsed
raise ValueError("Invalid BS date format")
except Exception:
from django_nepkit.utils import BS_DATE_FORMAT
except _PARSE_ERRORS:
raise forms.ValidationError(
_("Enter a valid Nepali date in %(format)s format.")
% {"format": BS_DATE_FORMAT},