feat: implement HTMX support, DRF filters, and professionalized documentation

- Implement server-side location chaining with HTMX support via `htmx=True` in fields and widgets.
- Update location views to handle HTMX requests and return HTML <option> fragments.
- Add NepaliDateYearFilter and NepaliDateRangeFilter for robust DRF API filtering.
- Expand default `DATE_INPUT_FORMATS` in configuration to support multiple common Nepali date styles.
- Update DRF serializers to automatically respect global `NEPKIT` configuration settings.
- Add `django-filter` as an optional dependency under the `drf` extra in pyproject.toml.
- Correct underlying dependency references from `nepali-datetime` to nepali library.
- Complete overhaul of README.md for premium DX, including new sections for storage behavior, timezone awareness, and API usage.
This commit is contained in:
sankalp committed 2026-01-30 15:22:13 +05:45
1 parent 7b07835e0c
commit 09f302ceaa
18 files changed
+2644 -164

No files matched your search

+103 -85
View File
@@ -6,35 +6,37 @@
[![Python Versions](https://img.shields.io/pypi/pyversions/django-nepkit.svg)](https://pypi.org/project/django-nepkit/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
</div>
**The essential toolkit for Django developers building for Nepal.**
`django-nepkit` handles the specific localization needs of Nepali web applications with elegance and ease. From correct Bikram Sambat (BS) date handling to smart address management and phone validation, we've got you covered.
`django-nepkit` handles the specific localization needs of Nepali web applications with elegance. From correct Bikram Sambat (BS) date handling to smart address management and phone validation.
[Features](#-key-features) • [Installation](#-installation) • [Configuration](#-global-configuration) • [Usage](#-quick-start) • [Storage & TZ](#-date-storage--timezone-behavior) • [API Support](#-api-support-drf--filters)
</div>
---
## ✨ Key Features
- **📅 Bikram Sambat (BS) Support**: Full support for Nepali dates and datetimes in models and forms.
- **📱 Smart Validation**: Built-in validators for Nepali phone numbers.
- **🗺️ Administrative Locations**: Chained selects for Provinces, Districts, and Municipalities.
- **🇳🇵 Bilingual Support**: Seamlessly switch between English and Nepali (Devanagari) output for locations and dates.
- **🔌 Zero-Config Admin**: `NepaliModelAdmin` automatically integrates the Nepali datepicker and formats list displays.
- **🚀 API Ready**: Optional DRF serializers with Devanagari support.
- **📅 Bikram Sambat (BS) Support**: Specialized `NepaliDateField` and `NepaliDateTimeField` for your models.
- **🗺️ Administrative Locations**: Out-of-the-box support for Provinces, Districts, and Municipalities with chained selects.
- **📱 Smart Validation**: Built-in validation for Nepali phone numbers.
- **🇳🇵 Bilingual by Design**: Seamlessly switch between English and Devanagari (Nepali) output.
- **🔌 Zero-Config Admin**: Automatic integration with the Nepali datepicker and formatted list displays.
- **🚀 API Ready**: First-class support for Django REST Framework and filtering.
- **⚡ HTMX Friendly**: Effortless server-side chained selects using HTMX.
---
## 🛠 Installation
Install via pip:
Install the core package via pip:
```bash
pip install django-nepkit
```
### Add to `INSTALLED_APPS`
### 1. Add to `INSTALLED_APPS`
In your `settings.py`:
@@ -46,13 +48,38 @@ INSTALLED_APPS = [
]
```
### 2. (Optional) DRF & Filters Support
If you plan to use it with Django REST Framework:
```bash
pip install "django-nepkit[drf]"
```
---
## ⚙️ Global Configuration
Customize the library's behavior globally in your `settings.py`:
```python
NEPKIT = {
"DEFAULT_LANGUAGE": "en", # "en" or "ne" (default: "en")
"DATE_INPUT_FORMATS": [ # Supported parsing formats
"%Y-%m-%d", "%d/%m/%Y", "%d-%m-%Y"
],
"ADMIN_DATEPICKER": True, # Toggle Nepali datepicker in admin
"TIME_FORMAT": 12, # 12 or 24 hour display in admin
}
```
---
## 🚀 Quick Start
### 1. Model Fields
Define your models with Nepali-specific requirements effortlessly.
`django-nepkit` fields act like standard Django fields but handle BS dates and Nepali validation.
```python
from django.db import models
@@ -64,23 +91,13 @@ from django_nepkit import (
class Citizen(models.Model):
name = models.CharField(max_length=100)
# Stores dates as YYYY-MM-DD strings (BS)
dob = NepaliDateField()
# Use ne=True for Devanagari digits/names in forms/admin
appointment = NepaliDateTimeField(ne=True)
# Validates correct Nepali phone patterns
phone = NepaliPhoneNumberField()
dob = NepaliDateField() # Stores as BS "YYYY-MM-DD"
phone = NepaliPhoneNumberField() # Validates Nepali patterns
```
### 2. Admin Integration
### 2. Zero-Config Admin
`NepaliModelAdmin` provides a zero-config experience. It:
- Automatically attaches the **Nepali Datepicker**.
- Formats `NepaliDateField` and `NepaliDateTimeField` in `list_display`.
- Registers `NepaliDateFilter` for easy year-based filtering.
Simply inherit from `NepaliModelAdmin` to get automatic datepickers and formatted list displays.
```python
from django.contrib import admin
@@ -93,100 +110,101 @@ class CitizenAdmin(NepaliModelAdmin):
```
> [!TIP]
> If you already have a custom base Admin class, use **`NepaliAdminMixin`** to get all formatting and filter benefits.
> If you have a custom base Admin class, use **`NepaliAdminMixin`** to inject Nepali formatting capabilities.
---
## 📝 Forms & Widgets
## 🗺️ Address Management
Need to build a custom form? `django-nepkit` provides specialized fields and widgets.
Model Nepal's administrative structure with automatic filtering: **Province → District → Municipality**.
```python
from django import forms
from django_nepkit.forms import NepaliDateFormField, NepaliPhoneNumberFormField
from django_nepkit.widgets import NepaliDatePickerWidget
class RegistrationForm(forms.Form):
# Field with built-in validation
birth_date = NepaliDateFormField()
# Or apply the widget to a standard field
event_date = forms.CharField(
widget=NepaliDatePickerWidget(ne=True) # Devanagari support
)
phone = NepaliPhoneNumberFormField()
```
---
## 🗺️ Address Management (Chained Selects)
Model Nepal's administrative structure with automatic filtering: Province → District → Municipality. This works out-of-the-box without any extra URL configuration.
### Standard Usage (Internal JS)
```python
from django_nepkit import ProvinceField, DistrictField, MunicipalityField
class Address(models.Model):
# For English names
province = ProvinceField()
district = DistrictField()
municipality = MunicipalityField()
```
# For Devanagari (बागमती, काठमाडौँ, etc.)
# province = ProvinceField(ne=True)
### HTMX Usage (Server-side)
For a more modern approach without writing JavaScript, enable HTMX chaining:
```python
class AddressForm(forms.Form):
province = ProvinceField(htmx=True)
district = DistrictField(htmx=True)
municipality = MunicipalityField()
```
> [!IMPORTANT]
> Ensure the [HTMX](https://htmx.org/) library is loaded in your templates when using `htmx=True`.
---
## 🔌 API Support (DRF & Filters)
Full integration with Django REST Framework and Django-Filter.
### Serializers
Fields automatically respect your `DEFAULT_LANGUAGE` but can be localized individually.
```python
from django_nepkit.serializers import NepaliDateSerializerField
class CitizenSerializer(serializers.ModelSerializer):
dob = NepaliDateSerializerField() # Outputs BS formatted date
```
### Filters
Filter your API results by BS Year or Date range effortlessly.
```python
from django_nepkit.filters import NepaliDateYearFilter
class CitizenFilter(filters.FilterSet):
# Filter by BS Year (e.g., /api/citizens/?birth_year=2080)
birth_year = NepaliDateYearFilter(field_name="dob")
```
---
## 🔌 API Support (Django REST Framework)
## 🕒 Date Storage & Timezone Behavior
Install the optional dependency for serializer fields:
```bash
pip install "django-nepkit[drf]"
```
Use them in your serializers with optional Devanagari (`ne=True`) output:
```python
from rest_framework import serializers
from django_nepkit.serializers import NepaliDateSerializerField
class CitizenSerializer(serializers.ModelSerializer):
# Output: "२०८१-१०-१७" if ne=True
dob = NepaliDateSerializerField(format="%Y-%m-%d", ne=True)
class Meta:
model = Citizen
fields = "__all__"
```
| Aspect | Behavior |
| :--- | :--- |
| **Database Storage** | Stored as `VARCHAR(10)` or `VARCHAR(19)` in BS format (`YYYY-MM-DD`). |
| **Why strings?** | Avoids redundant AD/BS conversion overhead and ensures data integrity. |
| **Object Type** | Retrieved as `nepalidate` or `nepalidatetime` objects (via `nepali` lib). |
| **Timezone** | Respects `USE_TZ`. Converts UTC `now()` to your local time before BS conversion. |
---
## 🛠️ Utility Functions
Need to format a date in your logic or views?
```python
from django_nepkit import format_nepali_date
# Result: "Magh 17, 2081" (or "माघ १७, २०८१" if ne=True)
formatted = format_nepali_date(my_date, format_string="%B %d, %Y", ne=False)
# Example: "Magh 17, 2081" or "माघ १७, २०८१"
formatted = format_nepali_date(my_date, format_string="%B %d, %Y")
```
---
## 🤝 Contributing
We love contributions!
We welcome contributions to make this toolkit even better!
1. Clone the repo: `git clone https://github.com/S4NKALP/django-nepkit`
2. Install dependencies: `uv sync`
3. Run the tests: `uv run pytest`
4. Run the example project: `cd example && python manage.py runserver`
1. **Clone**: `git clone https://github.com/S4NKALP/django-nepkit`
2. **Setup**: `uv sync` (We use [uv](https://github.com/astral-sh/uv) for project management)
3. **Test**: `uv run pytest`
4. **Try**: `cd example && python manage.py runserver`
---
## 📄 License
MIT License. Made with ❤️ for the Nepali Django community.
MIT License. Crafted with ❤️ for the Nepali Django community.
+14 -7
View File
@@ -7,6 +7,7 @@ from django_nepkit.utils import (
try_parse_nepali_date,
try_parse_nepali_datetime,
)
from django_nepkit.conf import nepkit_settings
def _format_nepali_common(value, try_parse_func, format_string, ne, cls_type):
@@ -40,11 +41,17 @@ def format_nepali_date(date_value, format_string="%B %d, %Y", ne=False):
def format_nepali_datetime(
datetime_value, format_string="%B %d, %Y %I:%M %p", ne=False
datetime_value, format_string=None, ne=False
):
"""
Format a nepalidatetime object with Nepali month names.
"""
if format_string is None:
if nepkit_settings.TIME_FORMAT == 24:
format_string = "%B %d, %Y %H:%M"
else:
format_string = "%B %d, %Y %I:%M %p"
return _format_nepali_common(
datetime_value, try_parse_nepali_datetime, format_string, ne, nepalidatetime
)
@@ -148,21 +155,21 @@ class NepaliAdminMixin:
Args:
date_value: A nepalidate object or string
format_string: strftime format string
ne: If True, format using Devanagari script. If None, auto-detect from field (default: None)
ne: If True, format using Devanagari script. If None, auto-detect from field or global settings (default: None)
field_name: Name of the field to auto-detect 'ne' setting from (optional)
"""
# Auto-detect 'ne' from field if not explicitly provided
if ne is None and field_name:
ne = self._get_field_ne_setting(field_name)
elif ne is None:
ne = False
ne = nepkit_settings.DEFAULT_LANGUAGE == "ne"
return format_nepali_date(date_value, format_string, ne=ne)
def format_nepali_datetime(
self,
datetime_value,
format_string="%B %d, %Y %I:%M %p",
format_string=None,
ne=None,
field_name=None,
):
@@ -172,14 +179,14 @@ class NepaliAdminMixin:
Args:
datetime_value: A nepalidatetime object or string
format_string: strftime format string
ne: If True, format using Devanagari script. If None, auto-detect from field (default: None)
ne: If True, format using Devanagari script. If None, auto-detect from field or global settings (default: None)
field_name: Name of the field to auto-detect 'ne' setting from (optional)
"""
# Auto-detect 'ne' from field if not explicitly provided
if ne is None and field_name:
ne = self._get_field_ne_setting(field_name)
elif ne is None:
ne = False
ne = nepkit_settings.DEFAULT_LANGUAGE == "ne"
return format_nepali_datetime(datetime_value, format_string, ne=ne)
@@ -262,7 +269,7 @@ class NepaliModelAdmin(NepaliAdminMixin, admin.ModelAdmin):
except Exception:
return super().formfield_for_dbfield(db_field, request, **kwargs)
if isinstance(db_field, (NepaliDateField, NepaliDateTimeField)):
if isinstance(db_field, (NepaliDateField, NepaliDateTimeField)) and nepkit_settings.ADMIN_DATEPICKER:
# Pass ne/en parameters from field to widget if they exist
widget_kwargs = {}
if hasattr(db_field, "ne"):
+34
View File
@@ -0,0 +1,34 @@
from django.conf import settings
DEFAULTS = {
"DEFAULT_LANGUAGE": "en",
"DATE_INPUT_FORMATS": ["%Y-%m-%d", "%d/%m/%Y", "%d-%m-%Y"],
"ADMIN_DATEPICKER": True,
"TIME_FORMAT": 12,
}
class NepkitSettings:
"""
A settings object that allows items to be accessed as properties.
"""
def __init__(self, user_settings=None, defaults=None):
self._user_settings = user_settings or {}
self.defaults = defaults or DEFAULTS
def __getattr__(self, attr):
if attr not in self.defaults:
raise AttributeError(f"Invalid NEPKIT setting: '{attr}'")
try:
# Check for user setting
val = self._user_settings[attr]
except KeyError:
# Fall back to defaults
val = self.defaults[attr]
return val
nepkit_settings = NepkitSettings(getattr(settings, "NEPKIT", {}), DEFAULTS)
+42
View File
@@ -0,0 +1,42 @@
from __future__ import annotations
from typing import Any
from django.db.models import QuerySet
try:
from django_filters import rest_framework as filters
except ImportError as e:
raise ModuleNotFoundError(
"django-nepkit filter support is optional. Install with `django-nepkit[drf]` "
"to use `django_nepkit.filters`."
) from e
class NepaliDateYearFilter(filters.NumberFilter):
"""
A filter for `NepaliDateField` that allows filtering by Bikram Sambat Year.
Expects an integer year (e.g., 2080).
Usage:
year = NepaliDateYearFilter(field_name="dob")
"""
def filter(self, qs: QuerySet, value: Any) -> QuerySet:
if value:
# Since date is stored as "YYYY-MM-DD" string
return qs.filter(**{f"{self.field_name}__startswith": f"{value}-"})
return qs
class NepaliDateRangeFilter(filters.BaseRangeFilter, filters.CharFilter):
"""
A filter for `NepaliDateField` that allows filtering by a range of BS dates.
Expects two BS strings separated by a comma (e.g., "2080-01-01,2080-12-30").
"""
def filter(self, qs: QuerySet, value: Any) -> QuerySet:
if value:
if len(value) == 2:
return qs.filter(**{f"{self.field_name}__range": (value[0], value[1])})
return qs
+53 -17
View File
@@ -1,6 +1,8 @@
from datetime import date as python_date
from datetime import datetime as python_datetime
from django.db import models
from django.utils import timezone
from django.utils.translation import gettext_lazy as _
from nepali.datetime import nepalidate, nepalidatetime
from nepali.locations import districts, municipalities, provinces
@@ -19,6 +21,7 @@ from django_nepkit.widgets import (
NepaliDatePickerWidget,
ProvinceSelectWidget,
)
from django_nepkit.conf import nepkit_settings
class NepaliFieldMixin:
@@ -27,14 +30,19 @@ class NepaliFieldMixin:
"""
def __init__(self, *args, **kwargs):
self.ne = kwargs.pop("ne", False)
# Always pop en from kwargs to avoid passing it to super()
en_value = kwargs.pop("en", True)
# If ne=True, automatically set en=False
if self.ne:
default_lang = nepkit_settings.DEFAULT_LANGUAGE
self.ne = kwargs.pop("ne", default_lang == "ne")
explicit_en = "en" in kwargs
en_value = kwargs.pop("en", not self.ne)
if self.ne and not explicit_en:
self.en = False
else:
self.en = en_value
self.htmx = kwargs.pop("htmx", False)
super().__init__(*args, **kwargs)
def deconstruct(self):
@@ -43,6 +51,8 @@ class NepaliFieldMixin:
kwargs["ne"] = True
if not self.en:
kwargs["en"] = False
if self.htmx:
kwargs["htmx"] = True
return name, path, args, kwargs
@@ -77,8 +87,11 @@ class NepaliDateField(NepaliFieldMixin, models.CharField):
def pre_save(self, model_instance, add):
if self.auto_now or (self.auto_now_add and add):
# Using nepalidate.today() to get current BS date.
value = nepalidate.today().strftime(BS_DATE_FORMAT)
# Using timezone.now() to get current date, then converting to BS.
now = timezone.now()
if timezone.is_aware(now):
now = timezone.localtime(now)
value = nepalidate.from_date(now).strftime(BS_DATE_FORMAT)
setattr(model_instance, self.attname, value)
return value
return super().pre_save(model_instance, add)
@@ -90,8 +103,10 @@ class NepaliDateField(NepaliFieldMixin, models.CharField):
def to_python(self, value):
if value is None or isinstance(value, nepalidate):
return value
if isinstance(value, python_date):
if isinstance(value, (python_date, python_datetime)):
try:
if isinstance(value, python_datetime) and timezone.is_aware(value):
value = timezone.localtime(value)
return nepalidate.from_date(value)
except (ValueError, TypeError):
return str(value)
@@ -115,8 +130,10 @@ class NepaliDateField(NepaliFieldMixin, models.CharField):
return value
if isinstance(value, nepalidate):
return value.strftime(BS_DATE_FORMAT)
if isinstance(value, python_date):
if isinstance(value, (python_date, python_datetime)):
try:
if isinstance(value, python_datetime) and timezone.is_aware(value):
value = timezone.localtime(value)
return nepalidate.from_date(value).strftime(BS_DATE_FORMAT)
except (ValueError, TypeError):
return str(value)
@@ -171,7 +188,10 @@ class NepaliDateTimeField(NepaliFieldMixin, models.CharField):
def pre_save(self, model_instance, add):
if self.auto_now or (self.auto_now_add and add):
value = nepalidatetime.now().strftime(BS_DATETIME_FORMAT)
now = timezone.now()
if timezone.is_aware(now):
now = timezone.localtime(now)
value = nepalidatetime.from_datetime(now).strftime(BS_DATETIME_FORMAT)
setattr(model_instance, self.attname, value)
return value
return super().pre_save(model_instance, add)
@@ -183,6 +203,13 @@ class NepaliDateTimeField(NepaliFieldMixin, models.CharField):
def to_python(self, value):
if value is None or isinstance(value, nepalidatetime):
return value
if isinstance(value, python_datetime):
try:
if timezone.is_aware(value):
value = timezone.localtime(value)
return nepalidatetime.from_datetime(value)
except (ValueError, TypeError):
return str(value)
if isinstance(value, str):
parsed = try_parse_nepali_datetime(value)
return parsed if parsed is not None else value
@@ -203,6 +230,13 @@ class NepaliDateTimeField(NepaliFieldMixin, models.CharField):
return value
if isinstance(value, nepalidatetime):
return value.strftime(BS_DATETIME_FORMAT)
if isinstance(value, python_datetime):
try:
if timezone.is_aware(value):
value = timezone.localtime(value)
return nepalidatetime.from_datetime(value).strftime(BS_DATETIME_FORMAT)
except (ValueError, TypeError):
return str(value)
if isinstance(value, str):
return value
return str(value)
@@ -245,7 +279,8 @@ class ProvinceField(NepaliFieldMixin, models.CharField):
# Or just manually set self.ne/self.en here and don't rely on Mixin's init for choices, but rely on it for other things?
# To avoid complexity, I'll peek at kwargs['ne'] if it exists.
ne = kwargs.get("ne", False)
default_lang = nepkit_settings.DEFAULT_LANGUAGE
ne = kwargs.get("ne", default_lang == "ne")
def get_p_name(p, ne):
name = getattr(p, "name_nepali", p.name) if ne else p.name
@@ -261,9 +296,8 @@ class ProvinceField(NepaliFieldMixin, models.CharField):
super().__init__(*args, **kwargs)
def formfield(self, **kwargs):
defaults = {"widget": ProvinceSelectWidget(ne=self.ne, en=self.en)}
defaults = {"widget": ProvinceSelectWidget(ne=self.ne, en=self.en, htmx=self.htmx)}
defaults.update(kwargs)
# Bypassing the immediate parent's formfield if it's just CharField's
return super(models.CharField, self).formfield(**defaults)
# Wait, super().formfield() calls Django's CharField.formfield.
# We want that.
@@ -273,7 +307,8 @@ class DistrictField(NepaliFieldMixin, models.CharField):
description = _("Nepali District")
def __init__(self, *args, **kwargs):
ne = kwargs.get("ne", False)
default_lang = nepkit_settings.DEFAULT_LANGUAGE
ne = kwargs.get("ne", default_lang == "ne")
kwargs.setdefault("max_length", 100)
def get_d_name(d, ne):
@@ -285,7 +320,7 @@ class DistrictField(NepaliFieldMixin, models.CharField):
super().__init__(*args, **kwargs)
def formfield(self, **kwargs):
defaults = {"widget": DistrictSelectWidget(ne=self.ne, en=self.en)}
defaults = {"widget": DistrictSelectWidget(ne=self.ne, en=self.en, htmx=self.htmx)}
defaults.update(kwargs)
return super(models.CharField, self).formfield(**defaults)
@@ -294,7 +329,8 @@ class MunicipalityField(NepaliFieldMixin, models.CharField):
description = _("Nepali Municipality")
def __init__(self, *args, **kwargs):
ne = kwargs.get("ne", False)
default_lang = nepkit_settings.DEFAULT_LANGUAGE
ne = kwargs.get("ne", default_lang == "ne")
kwargs.setdefault("max_length", 100)
def get_m_name(m, ne):
@@ -306,6 +342,6 @@ class MunicipalityField(NepaliFieldMixin, models.CharField):
super().__init__(*args, **kwargs)
def formfield(self, **kwargs):
defaults = {"widget": MunicipalitySelectWidget(ne=self.ne, en=self.en)}
defaults = {"widget": MunicipalitySelectWidget(ne=self.ne, en=self.en, htmx=self.htmx)}
defaults.update(kwargs)
return super(models.CharField, self).formfield(**defaults)
+16 -7
View File
@@ -13,6 +13,7 @@ except ModuleNotFoundError as e:
) from e
from django_nepkit.utils import try_parse_nepali_date, try_parse_nepali_datetime
from django_nepkit.conf import nepkit_settings
# --------------------------------------------------
# Base Serializer Field
@@ -41,24 +42,32 @@ class BaseNepaliBSField(serializers.Field):
self,
*,
format: Optional[str] = None,
ne: bool = False,
en: bool = True,
ne: Optional[bool] = None,
en: Optional[bool] = None,
**kwargs: Any,
) -> None:
"""
Args:
format: Optional `strftime` format used for representation.
If not provided, uses the class default.
ne: If True, output in Devanagari script (default: False).
en: If True, output in English (default: True). When ne=True, en is False.
ne: If True, output in Devanagari script. If None, uses DEFAULT_LANGUAGE.
en: If True, output in English. If None, derived from ne.
"""
if format is not None:
self.format = format
self.ne = ne
if self.ne:
self.en = False
default_lang = nepkit_settings.DEFAULT_LANGUAGE
if ne is None:
self.ne = default_lang == "ne"
else:
self.ne = ne
if en is None:
self.en = not self.ne
else:
self.en = en
super().__init__(**kwargs)
def _parse(self, value: str):
+6 -1
View File
@@ -1,4 +1,5 @@
from django import template
from django.utils import timezone
from nepali.datetime import nepalidate, nepalihumanize
from nepali.number import nepalinumber
import datetime
@@ -11,7 +12,11 @@ def _coerce_ad_date_to_bs(value):
Internal helper: if value is AD date/datetime, convert to `nepalidate`.
Does NOT attempt to parse strings (keeps template behavior minimal).
"""
if isinstance(value, (datetime.datetime, datetime.date)):
if isinstance(value, datetime.datetime):
if timezone.is_aware(value):
value = timezone.localtime(value)
return nepalidate.from_date(value)
if isinstance(value, datetime.date):
return nepalidate.from_date(value)
return value
+12 -5
View File
@@ -5,21 +5,28 @@ from typing import Any, Optional
from nepali.datetime import nepalidate, nepalidatetime
from nepali.locations import districts, provinces
from django_nepkit.conf import nepkit_settings
BS_DATE_FORMAT = "%Y-%m-%d"
BS_DATETIME_FORMAT = "%Y-%m-%d %H:%M:%S"
def _try_parse_nepali(value: Any, cls: Any, fmt: str) -> Any:
def _try_parse_nepali(value: Any, cls: Any, fallback_fmt: str) -> Any:
"""Internal helper to parse Nepali date/datetime."""
if value in (None, ""):
return None
if isinstance(value, cls):
return value
if isinstance(value, str):
try:
return cls.strptime(value.strip(), fmt)
except Exception:
return None
formats = nepkit_settings.DATE_INPUT_FORMATS
if fallback_fmt not in formats:
formats = list(formats) + [fallback_fmt]
for fmt in formats:
try:
return cls.strptime(value.strip(), fmt)
except Exception:
continue
return None
+38 -3
View File
@@ -1,4 +1,5 @@
from django.http import JsonResponse
from django.http import JsonResponse, HttpResponse
from django.template.loader import render_to_string
from django_nepkit.utils import (
get_districts_by_province,
@@ -6,27 +7,61 @@ from django_nepkit.utils import (
)
def _render_options(data, placeholder):
"""Internal helper to render list of options as HTML."""
options = [f'<option value="">{placeholder}</option>']
for item in data:
options.append(f'<option value="{item["id"]}">{item["text"]}</option>')
return HttpResponse("\n".join(options))
def district_list_view(request):
province = request.GET.get("province")
# Fallback: take the first non-internal parameter as province
if not province:
for key, value in request.GET.items():
if key not in ["ne", "en", "html"] and value:
province = value
break
if not province:
return JsonResponse([], safe=False)
# Check for ne/en parameters from request or widget data attributes
ne = request.GET.get("ne", "false").lower() == "true"
en = request.GET.get("en", "true").lower() == "true"
as_html = request.GET.get("html", "false").lower() == "true" or request.headers.get("HX-Request") == "true"
data = get_districts_by_province(province, ne=ne, en=en)
if as_html:
placeholder = "जिल्ला छान्नुहोस्" if ne else "Select District"
return _render_options(data, placeholder)
return JsonResponse(data, safe=False)
def municipality_list_view(request):
district = request.GET.get("district")
# Fallback: take the first non-internal parameter as district
if not district:
for key, value in request.GET.items():
if key not in ["ne", "en", "html"] and value:
district = value
break
if not district:
return JsonResponse([], safe=False)
# Check for ne/en parameters from request or widget data attributes
ne = request.GET.get("ne", "false").lower() == "true"
en = request.GET.get("en", "true").lower() == "true"
as_html = request.GET.get("html", "false").lower() == "true" or request.headers.get("HX-Request") == "true"
data = get_municipalities_by_district(district, ne=ne, en=en)
if as_html:
placeholder = "नगरपालिका छान्नुहोस्" if ne else "Select Municipality"
return _render_options(data, placeholder)
return JsonResponse(data, safe=False)
+26 -18
View File
@@ -2,6 +2,8 @@ from django import forms
from django.urls import reverse_lazy
from nepali.datetime import nepalidate
from django_nepkit.conf import nepkit_settings
def _append_css_class(attrs, class_name: str):
"""
@@ -14,12 +16,11 @@ def _append_css_class(attrs, class_name: str):
class NepaliWidgetMixin:
def __init__(self, *args, **kwargs):
self.ne = kwargs.pop("ne", False)
en_value = kwargs.pop("en", True)
if self.ne:
self.en = False
else:
self.en = en_value
default_lang = nepkit_settings.DEFAULT_LANGUAGE
self.ne = kwargs.pop("ne", default_lang == "ne")
self.en = kwargs.pop("en", not self.ne)
self.htmx = kwargs.pop("htmx", False)
attrs = kwargs.get("attrs", {}) or {}
@@ -51,28 +52,35 @@ class ChainedSelectWidget(forms.Select):
class ProvinceSelectWidget(NepaliWidgetMixin, ChainedSelectWidget):
def _configure_attrs(self, attrs):
_append_css_class(attrs, "nepkit-province-select")
if self.htmx:
url = reverse_lazy("django_nepkit:district-list")
attrs.update({
"hx-get": url,
"hx-target": ".nepkit-district-select",
"hx-trigger": "change",
})
class DistrictSelectWidget(NepaliWidgetMixin, ChainedSelectWidget):
def _configure_attrs(self, attrs):
_append_css_class(attrs, "nepkit-district-select")
try:
url = reverse_lazy("django_nepkit:district-list")
str(url) # Force evaluation to catch NoReverseMatch
attrs["data-url"] = url
except Exception:
pass
url = reverse_lazy("django_nepkit:district-list")
attrs["data-url"] = url
if self.htmx:
url_muni = reverse_lazy("django_nepkit:municipality-list")
attrs.update({
"hx-get": url_muni,
"hx-target": ".nepkit-municipality-select",
"hx-trigger": "change",
})
class MunicipalitySelectWidget(NepaliWidgetMixin, ChainedSelectWidget):
def _configure_attrs(self, attrs):
_append_css_class(attrs, "nepkit-municipality-select")
try:
url = reverse_lazy("django_nepkit:municipality-list")
str(url) # Force evaluation to catch NoReverseMatch
attrs["data-url"] = url
except Exception:
pass
url = reverse_lazy("django_nepkit:municipality-list")
attrs["data-url"] = url
class NepaliDatePickerWidget(NepaliWidgetMixin, forms.TextInput):
+4 -4
View File
@@ -10,14 +10,14 @@ class PersonAdmin(NepaliModelAdmin):
list_display = (
"name",
"birth_date",
"birth_date_en",
"birth_date_ne",
"phone_number",
"province",
"province_en",
"province_ne",
"district",
"district_en",
"district_ne",
"municipality",
"municipality_en",
"municipality_ne",
"created_at",
"updated_at",
)
@@ -0,0 +1,911 @@
# Generated by Django 6.0.1 on 2026-01-30 09:11
import django_nepkit.models
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("demo", "0001_initial"),
]
operations = [
migrations.AlterField(
model_name="person",
name="district_en",
field=django_nepkit.models.DistrictField(
blank=True,
choices=[
("बाजुरा", "बाजुरा"),
("बझाङ", "बझाङ"),
("बैतडी", "बैतडी"),
("डडेलधुरा", "डडेलधुरा"),
("डोटी", "डोटी"),
("अछाम", "अछाम"),
("कैलाली", "कैलाली"),
("दार्चुला", "दार्चुला"),
("कञ्\u200dचनपुर", "कञ्\u200dचनपुर"),
("सप्तरी", "सप्तरी"),
("सिराहा", "सिराहा"),
("धनुषा", "धनुषा"),
("महोत्तरी", "महोत्तरी"),
("सर्लाही", "सर्लाही"),
("रौतहट", "रौतहट"),
("बारा", "बारा"),
("पर्सा", "पर्सा"),
("गोरखा", "गोरखा"),
("मनाङ", "मनाङ"),
("मुस्ताङ", "मुस्ताङ"),
("म्याग्दी", "म्याग्दी"),
("कास्की", "कास्की"),
("लमजुङ", "लमजुङ"),
("तनहुँ", "तनहुँ"),
("नवलपरासी पूर्व", "नवलपरासी पूर्व"),
("स्याङ्जा", "स्याङ्जा"),
("पर्वत", "पर्वत"),
("बाग्लुङ", "बाग्लुङ"),
("दोलखा", "दोलखा"),
("सिन्धुपाल्चोक", "सिन्धुपाल्चोक"),
("रसुवा", "रसुवा"),
("धादिङ", "धादिङ"),
("नुवाकोट", "नुवाकोट"),
("काठमाडौं", "काठमाडौं"),
("भक्तपुर", "भक्तपुर"),
("ललितपुर", "ललितपुर"),
("काभ्रेपलान्चोक", "काभ्रेपलान्चोक"),
("रामेछाप", "रामेछाप"),
("सिन्धुली", "सिन्धुली"),
("मकवानपुर", "मकवानपुर"),
("चितवन", "चितवन"),
("रूकुम पूर्व", "रूकुम पूर्व"),
("रोल्पा", "रोल्पा"),
("प्युठान", "प्युठान"),
("गुल्मी", "गुल्मी"),
("अर्घाखाँची", "अर्घाखाँची"),
("पाल्पा", "पाल्पा"),
("रुपन्देही", "रुपन्देही"),
("कपिलवस्तु", "कपिलवस्तु"),
("दाङ", "दाङ"),
("बाँके", "बाँके"),
("बर्दिया", "बर्दिया"),
("नवलपरासी पश्चिम", "नवलपरासी पश्चिम"),
("डोल्पा", "डोल्पा"),
("मुगु", "मुगु"),
("जुम्ला", "जुम्ला"),
("कालिकोट", "कालिकोट"),
("दैलेख", "दैलेख"),
("जाजरकोट", "जाजरकोट"),
("सल्यान", "सल्यान"),
("सुर्खेत", "सुर्खेत"),
("हुम्ला", "हुम्ला"),
("रूकुम पश्चिम", "रूकुम पश्चिम"),
("ताप्लेजुङ", "ताप्लेजुङ"),
("सङ्खुवासभा", "सङ्खुवासभा"),
("सोलुखुम्बु", "सोलुखुम्बु"),
("ओखलढुङ्गा", "ओखलढुङ्गा"),
("खोटाङ", "खोटाङ"),
("भोजपुर", "भोजपुर"),
("धनकुटा", "धनकुटा"),
("तेह्रथुम", "तेह्रथुम"),
("पाँचथर", "पाँचथर"),
("इलाम", "इलाम"),
("झापा", "झापा"),
("मोरङ", "मोरङ"),
("सुनसरी", "सुनसरी"),
("उदयपुर", "उदयपुर"),
],
en=False,
max_length=100,
ne=True,
null=True,
),
),
migrations.AlterField(
model_name="person",
name="municipality_en",
field=django_nepkit.models.MunicipalityField(
blank=True,
choices=[
("हिमाली गाउँपालिका", "हिमाली गाउँपालिका"),
("गौमुल गाउँपालिका", "गौमुल गाउँपालिका"),
("बडीमालिका नगरपालिका", "बडीमालिका नगरपालिका"),
("छेडेदह गाउँपालिका", "छेडेदह गाउँपालिका"),
("बुढीगंगा नगरपालिका", "बुढीगंगा नगरपालिका"),
("त्रिवेणी नगरपालिका", "त्रिवेणी नगरपालिका"),
("जगन्नाथगाउँपालिका", "जगन्नाथगाउँपालिका"),
("बुढीनन्दा नगरपालिका", "बुढीनन्दा नगरपालिका"),
("स्वामीकार्तिक खापर गाउँपालिका", "स्वामीकार्तिक खापर गाउँपालिका"),
("काँडा गाउँपालिका", "काँडा गाउँपालिका"),
("बुङ्गल नगरपालिका", "बुङ्गल नगरपालिका"),
("तलकोट गाउँपालिका", "तलकोट गाउँपालिका"),
("मष्टा गाउँपालिका", "मष्टा गाउँपालिका"),
("जयपृथ्वी नगरपालिका", "जयपृथ्वी नगरपालिका"),
("छबिसपाथिभेरा गाउँपालिका", "छबिसपाथिभेरा गाउँपालिका"),
("दुर्गाथली गाउँपालिका", "दुर्गाथली गाउँपालिका"),
("बित्थडचिर गाउँपालिका", "बित्थडचिर गाउँपालिका"),
("थलारा गाउँपालिका", "थलारा गाउँपालिका"),
("खप्तडछान्ना गाउँपालिका", "खप्तडछान्ना गाउँपालिका"),
("सूर्मा गाउँपालिका", "सूर्मा गाउँपालिका"),
("केदारस्यु गाउँपालिका", "केदारस्यु गाउँपालिका"),
("डिलासैनी गाउँपालिका", "डिलासैनी गाउँपालिका"),
("दोगडाकेदार गाउँपालिका", "दोगडाकेदार गाउँपालिका"),
("पुर्चौडी नगरपालिका", "पुर्चौडी नगरपालिका"),
("सुर्नया गाउँपालिका", "सुर्नया गाउँपालिका"),
("दशरथचन्द नगरपालिका", "दशरथचन्द नगरपालिका"),
("शिवनाथ गाउँपालिका", "शिवनाथ गाउँपालिका"),
("मेलौली नगरपालिका", "मेलौली नगरपालिका"),
("पाटन नगरपालिका", "पाटन नगरपालिका"),
("सिगास गाउँपालिका", "सिगास गाउँपालिका"),
("पञ्चेश्वर गाउँपालिका", "पञ्चेश्वर गाउँपालिका"),
("नवदुर्गा गाउँपालिका", "नवदुर्गा गाउँपालिका"),
("अमरगढी नगरपालिका", "अमरगढी नगरपालिका"),
("भागेश्वोर गाउँपालिका", "भागेश्वोर गाउँपालिका"),
("परशुराम नगरपालिका", "परशुराम नगरपालिका"),
("आलिताल गाउँपालिका", "आलिताल गाउँपालिका"),
("गन्यापधुरा गाउँपालिका", "गन्यापधुरा गाउँपालिका"),
("अजयमेरु गाउँपालिका", "अजयमेरु गाउँपालिका"),
("पूर्बिचाैकि गाउँपालिका", "पूर्बिचाैकि गाउँपालिका"),
("सायल गाउँपालिका", "सायल गाउँपालिका"),
("के.आई.सिंह गाउँपालिका", "के.आई.सिंह गाउँपालिका"),
("बोगटान फुड्सिल गाउँपालिका", "बोगटान फुड्सिल गाउँपालिका"),
("बडीकेदार गाउँपालिका", "बडीकेदार गाउँपालिका"),
("जोरायल गाउँपालिका", "जोरायल गाउँपालिका"),
("आदर्श गाउँपालिका", "आदर्श गाउँपालिका"),
("शिखर नगरपालिका", "शिखर नगरपालिका"),
("दिपायल सिलगढी नगरपालिका", "दिपायल सिलगढी नगरपालिका"),
("रामारोशन गाउँपालिका", "रामारोशन गाउँपालिका"),
("मेल्लेख गाउँपालिका", "मेल्लेख गाउँपालिका"),
("साँफेबगर नगरपालिका", "साँफेबगर नगरपालिका"),
("चौरपाटी गाउँपालिका", "चौरपाटी गाउँपालिका"),
("मंगलसेन नगरपालिका", "मंगलसेन नगरपालिका"),
("कमलबजार नगरपालिका", "कमलबजार नगरपालिका"),
("ढकारी गाउँपालिका", "ढकारी गाउँपालिका"),
("तुर्माखाँद गाउँपालिका", "तुर्माखाँद गाउँपालिका"),
("पंचदेवल विनायक नगरपालिका", "पंचदेवल विनायक नगरपालिका"),
("बान्नीगढी जयगढ गाउँपालिका", "बान्नीगढी जयगढ गाउँपालिका"),
("मोहन्याल गाउँपालिका", "मोहन्याल गाउँपालिका"),
("चुरे गाउँपालिका", "चुरे गाउँपालिका"),
("गोदावरी नगरपालिका", "गोदावरी नगरपालिका"),
("गौरीगङ्गा नगरपालिका", "गौरीगङ्गा नगरपालिका"),
("बर्दगोरिया गाउँपालिका", "बर्दगोरिया गाउँपालिका"),
("लम्किचुहा नगरपालिका", "लम्किचुहा नगरपालिका"),
("जानकी गाउँपालिका", "जानकी गाउँपालिका"),
("जोशीपुर गाउँपालिका", "जोशीपुर गाउँपालिका"),
("टीकापुर नगरपालिका", "टीकापुर नगरपालिका"),
("भजनी नगरपालिका", "भजनी नगरपालिका"),
("धनगढी उप-महानगरपालिका", "धनगढी उप-महानगरपालिका"),
("घोडाघोडी नगरपालिका", "घोडाघोडी नगरपालिका"),
("कैलारी गाउँपालिका", "कैलारी गाउँपालिका"),
("व्यास गाउँपालिका", "व्यास गाउँपालिका"),
("दुहुँ गाउँपालिका", "दुहुँ गाउँपालिका"),
("महाकाली नगरपालिका", "महाकाली नगरपालिका"),
("अपिहिमाल गाउँपालिका", "अपिहिमाल गाउँपालिका"),
("मार्मा गाउँपालिका", "मार्मा गाउँपालिका"),
("शैल्यशिखर नगरपालिका", "शैल्यशिखर नगरपालिका"),
("लेकम गाउँपालिका", "लेकम गाउँपालिका"),
("नौगाड गाउँपालिका", "नौगाड गाउँपालिका"),
("मालिकार्जुन गाउँपालिका", "मालिकार्जुन गाउँपालिका"),
("कृष्णपुर नगरपालिका", "कृष्णपुर नगरपालिका"),
("शुक्लाफाटा नगरपालिका", "शुक्लाफाटा नगरपालिका"),
("बेदकोट नगरपालिका", "बेदकोट नगरपालिका"),
("भीमदत्त नगरपालिका", "भीमदत्त नगरपालिका"),
("लालझाडी गाउँपालिका", "लालझाडी गाउँपालिका"),
("पुनर्वास नगरपालिका", "पुनर्वास नगरपालिका"),
("बेलौरी नगरपालिका", "बेलौरी नगरपालिका"),
("बेलडाँडी गाउँपालिका", "बेलडाँडी गाउँपालिका"),
("महाकाली नगरपालिका", "महाकाली नगरपालिका"),
("सप्तकोशी नगरपालिका", "सप्तकोशी नगरपालिका"),
("कञ्चनरुप नगरपालिका", "कञ्चनरुप नगरपालिका"),
("रुपनी गाउँपालिका", "रुपनी गाउँपालिका"),
("शम्भुनाथ नगरपालिका", "शम्भुनाथ नगरपालिका"),
("सुरुङ्\u200dगा नगरपालिका", "सुरुङ्\u200dगा नगरपालिका"),
("बलान-बिहुल गाउँपालिका", "बलान-बिहुल गाउँपालिका"),
("बोदे बर्साइन नगरपालिका", "बोदे बर्साइन नगरपालिका"),
("बेल्ही चपेना गाउँपालिका", "बेल्ही चपेना गाउँपालिका"),
("बिष्णुपुर गाउँपालिका", "बिष्णुपुर गाउँपालिका"),
("राजविराज नगरपालिका", "राजविराज नगरपालिका"),
("महादेवा गाउँपालिका", "महादेवा गाउँपालिका"),
("तिरहुत गाउँपालिका", "तिरहुत गाउँपालिका"),
("तिलाठी कोईलाडी गाउँपालिका", "तिलाठी कोईलाडी गाउँपालिका"),
("छिन्नमस्ता गाउँपालिका", "छिन्नमस्ता गाउँपालिका"),
("अग्निसाइर कृष्णासवरन गाउँपालिका", "अग्निसाइर कृष्णासवरन गाउँपालिका"),
("खडक नगरपालिका", "खडक नगरपालिका"),
("डाक्नेश्वरी नगरपालिका", "डाक्नेश्वरी नगरपालिका"),
("हनुमाननगर कंकालिनी नगरपालिका", "हनुमाननगर कंकालिनी नगरपालिका"),
("लहान नगरपालिका", "लहान नगरपालिका"),
("धनगढीमाई नगरपालिका", "धनगढीमाई नगरपालिका"),
("गोलबजार नगरपालिका", "गोलबजार नगरपालिका"),
("मिर्चैया नगरपालिका", "मिर्चैया नगरपालिका"),
("कर्जन्हा नगरपालिका", "कर्जन्हा नगरपालिका"),
("नरहा गाउँपालिका", "नरहा गाउँपालिका"),
("बिष्णुपुर गाउँपालिका", "बिष्णुपुर गाउँपालिका"),
("अर्नमा गाउँपालिका", "अर्नमा गाउँपालिका"),
("सुखीपुर नगरपालिका", "सुखीपुर नगरपालिका"),
("सखुवानन्कारकट्टी गाउँपालिका", "सखुवानन्कारकट्टी गाउँपालिका"),
("भगवानपुर गाउँपालिका", "भगवानपुर गाउँपालिका"),
("नवराजपुर गाउँपालिका", "नवराजपुर गाउँपालिका"),
("बरियारपट्टी गाउँपालिका", "बरियारपट्टी गाउँपालिका"),
("औरही गाउँपालिका", "औरही गाउँपालिका"),
("सिरहा नगरपालिका", "सिरहा नगरपालिका"),
("कल्याणपुर नगरपालिका", "कल्याणपुर नगरपालिका"),
("लक्ष्मीपुर पटरी गाउँपालिका", "लक्ष्मीपुर पटरी गाउँपालिका"),
("धनुषाधाम नगरपालिका", "धनुषाधाम नगरपालिका"),
("मिथिला नगरपालिका", "मिथिला नगरपालिका"),
("बटेश्वर गाउँपालिका", "बटेश्वर गाउँपालिका"),
("क्षिरेश्वरनाथ नगरपालिका", "क्षिरेश्वरनाथ नगरपालिका"),
("लक्ष्मीनिया गाउँपालिका", "लक्ष्मीनिया गाउँपालिका"),
("मिथिला बिहारी नगरपालिका", "मिथिला बिहारी नगरपालिका"),
("हंसपुर नगरपालिका", "हंसपुर नगरपालिका"),
("शहीदनगर नगरपालिका", "शहीदनगर नगरपालिका"),
("कमला नगरपालिका", "कमला नगरपालिका"),
("जनकनन्दिनी गाउँपालिका", "जनकनन्दिनी गाउँपालिका"),
("विदेह नगरपालिका", "विदेह नगरपालिका"),
("जनकपुरधाम उप-महानगरपालिका", "जनकपुरधाम उप-महानगरपालिका"),
("धनौजी गाउँपालिका", "धनौजी गाउँपालिका"),
("नगराईन नगरपालिका", "नगराईन नगरपालिका"),
("गणेशमान चारनाथ नगरपालिका", "गणेशमान चारनाथ नगरपालिका"),
("सबैला नगरपालिका", "सबैला नगरपालिका"),
("औरही गाउँपालिका", "औरही गाउँपालिका"),
("मुखियापट्टी मुसहरनिया गाउँपालिका", "मुखियापट्टी मुसहरनिया गाउँपालिका"),
("बर्दिबास नगरपालिका", "बर्दिबास नगरपालिका"),
("गौशाला नगरपालिका", "गौशाला नगरपालिका"),
("सोनमा गाउँपालिका", "सोनमा गाउँपालिका"),
("औरही नगरपालिका", "औरही नगरपालिका"),
("लोहरपट्टी नगरपालिका", "लोहरपट्टी नगरपालिका"),
("बलवा नगरपालिका", "बलवा नगरपालिका"),
("रामगोपालपुर नगरपालिका", "रामगोपालपुर नगरपालिका"),
("साम्सी गाउँपालिका", "साम्सी गाउँपालिका"),
("एकडारा गाउँपालिका", "एकडारा गाउँपालिका"),
("महोत्तरी गाउँपालिका", "महोत्तरी गाउँपालिका"),
("पिपरा गाउँपालिका", "पिपरा गाउँपालिका"),
("मटिहानी नगरपालिका", "मटिहानी नगरपालिका"),
("जलेश्वर नगरपालिका", "जलेश्वर नगरपालिका"),
("भँगाहा नगरपालिका", "भँगाहा नगरपालिका"),
("मनरा शिसवा नगरपालिका", "मनरा शिसवा नगरपालिका"),
("लालबन्दी नगरपालिका", "लालबन्दी नगरपालिका"),
("बागमती नगरपालिका", "बागमती नगरपालिका"),
("बरहथवा नगरपालिका", "बरहथवा नगरपालिका"),
("हरिपुर नगरपालिका", "हरिपुर नगरपालिका"),
("ईश्वरपुर नगरपालिका", "ईश्वरपुर नगरपालिका"),
("पर्सा गाउँपालिका", "पर्सा गाउँपालिका"),
("ब्रह्मपुरी गाउँपालिका", "ब्रह्मपुरी गाउँपालिका"),
("चन्द्रनगर गाउँपालिका", "चन्द्रनगर गाउँपालिका"),
("कविलासी नगरपालिका", "कविलासी नगरपालिका"),
("चक्रघट्टा गाउँपालिका", "चक्रघट्टा गाउँपालिका"),
("धनकौल गाउँपालिका", "धनकौल गाउँपालिका"),
("रामनगर गाउँपालिका", "रामनगर गाउँपालिका"),
("बलारा नगरपालिका", "बलारा नगरपालिका"),
("गोडैटा नगरपालिका", "गोडैटा नगरपालिका"),
("विष्णु गाउँपालिका", "विष्णु गाउँपालिका"),
("मलंगवा नगरपालिका", "मलंगवा नगरपालिका"),
("हरिवन नगरपालिका", "हरिवन नगरपालिका"),
("हरिपुर्वा नगरपालिका", "हरिपुर्वा नगरपालिका"),
("बसबरीया गाउँपालिका", "बसबरीया गाउँपालिका"),
("कौडेना गाउँपालिका", "कौडेना गाउँपालिका"),
("चन्द्रपुर नगरपालिका", "चन्द्रपुर नगरपालिका"),
("गुजरा नगरपालिका", "गुजरा नगरपालिका"),
("फतुवाबिजयपुर नगरपालिका", "फतुवाबिजयपुर नगरपालिका"),
("कटहरिया नगरपालिका", "कटहरिया नगरपालिका"),
("बृन्दावन नगरपालिका", "बृन्दावन नगरपालिका"),
("माधव नारायण नगरपालिका", "माधव नारायण नगरपालिका"),
("गरुडा नगरपालिका", "गरुडा नगरपालिका"),
("देवाही गोनाही नगरपालिका", "देवाही गोनाही नगरपालिका"),
("मौलापुर नगरपालिका", "मौलापुर नगरपालिका"),
("बौधीमाई नगरपालिका", "बौधीमाई नगरपालिका"),
("परोहा नगरपालिका", "परोहा नगरपालिका"),
("यमुनामाई गाउँपालिका", "यमुनामाई गाउँपालिका"),
("राजदेवी नगरपालिका", "राजदेवी नगरपालिका"),
("गौर नगरपालिका", "गौर नगरपालिका"),
("ईशनाथ नगरपालिका", "ईशनाथ नगरपालिका"),
("गढीमाई नगरपालिका", "गढीमाई नगरपालिका"),
("राजपुर नगरपालिका", "राजपुर नगरपालिका"),
("दुर्गा भगवती गाउँपालिका", "दुर्गा भगवती गाउँपालिका"),
("निजगढ नगरपालिका", "निजगढ नगरपालिका"),
("कोल्हवी नगरपालिका", "कोल्हवी नगरपालिका"),
("परवानीपुर गाउँपालिका", "परवानीपुर गाउँपालिका"),
("प्रसौनी गाउँपालिका", "प्रसौनी गाउँपालिका"),
("विश्रामपुर गाउँपालिका", "विश्रामपुर गाउँपालिका"),
("फेटा गाउँपालिका", "फेटा गाउँपालिका"),
("कलैया उप-महानगरपालिका", "कलैया उप-महानगरपालिका"),
("करैयामाई गाउँपालिका", "करैयामाई गाउँपालिका"),
("आदर्श कोटवाल गाउँपालिका", "आदर्श कोटवाल गाउँपालिका"),
("सिम्रौनगढ नगरपालिका", "सिम्रौनगढ नगरपालिका"),
("पचरौता नगरपालिका", "पचरौता नगरपालिका"),
("महागढीमाई नगरपालिका", "महागढीमाई नगरपालिका"),
("देवताल गाउँपालिका", "देवताल गाउँपालिका"),
("जीतपुर सिमरा उप-महानगरपालिका", "जीतपुर सिमरा उप-महानगरपालिका"),
("बारागढी गाउँपालिका", "बारागढी गाउँपालिका"),
("सुवर्ण गाउँपालिका", "सुवर्ण गाउँपालिका"),
("ठोरी गाउँपालिका", "ठोरी गाउँपालिका"),
("जिराभवानी गाउँपालिका", "जिराभवानी गाउँपालिका"),
("जगरनाथपुर गाउँपालिका", "जगरनाथपुर गाउँपालिका"),
("सखुवा प्रसौनी गाउँपालिका", "सखुवा प्रसौनी गाउँपालिका"),
("पर्सागढी नगरपालिका", "पर्सागढी नगरपालिका"),
("वीरगंज महानगरपालिका", "वीरगंज महानगरपालिका"),
("बहुदरमाई नगरपालिका", "बहुदरमाई नगरपालिका"),
("पोखरि नगरपालिका", "पोखरि नगरपालिका"),
("कालिकामाई गाउँपालिका", "कालिकामाई गाउँपालिका"),
("धोबीनी गाउँपालिका", "धोबीनी गाउँपालिका"),
("पकहाँ मैनपुर गाउँपालिका", "पकहाँ मैनपुर गाउँपालिका"),
("बिन्दबासिनी गाउँपालिका", "बिन्दबासिनी गाउँपालिका"),
("पटेर्वा सुगौली गाउँपालिका", "पटेर्वा सुगौली गाउँपालिका"),
("छिपहरमाई गाउँपालिका", "छिपहरमाई गाउँपालिका"),
("चुमनुव्री गाउँपालिका", "चुमनुव्री गाउँपालिका"),
("बारपाक सुलिकोट गाउँपालिका", "बारपाक सुलिकोट गाउँपालिका"),
("धार्चे गाउँपालिका", "धार्चे गाउँपालिका"),
("आरूघाट गाउँपालिका", "आरूघाट गाउँपालिका"),
("भिमसेनथापा गाउँपालिका", "भिमसेनथापा गाउँपालिका"),
("सिरानचोक गाउँपालिका", "सिरानचोक गाउँपालिका"),
("गोरखा Municipality", "गोरखा Municipality"),
("शहिद लखन गाउँपालिका", "शहिद लखन गाउँपालिका"),
("गण्डकी गाउँपालिका", "गण्डकी गाउँपालिका"),
("अजिरकोट गाउँपालिका", "अजिरकोट गाउँपालिका"),
("पालुङटार नगरपालिका", "पालुङटार नगरपालिका"),
("नार्पा भूमि गाउँपालिका", "नार्पा भूमि गाउँपालिका"),
("चाँमे गाउँपालिका", "चाँमे गाउँपालिका"),
("नासाेँ गाउँपालिका", "नासाेँ गाउँपालिका"),
("मनाङ ङिस्याङ गाउँपालिका", "मनाङ ङिस्याङ गाउँपालिका"),
("दालोमे गाउँपालिका", "दालोमे गाउँपालिका"),
("घरपझोङ गाउँपालिका", "घरपझोङ गाउँपालिका"),
("लोमन्थाङ गाउँपालिका", "लोमन्थाङ गाउँपालिका"),
("थासाङ गाउँपालिका", "थासाङ गाउँपालिका"),
("वारागुङ मुक्तिक्षेत्रगाउँपालिका", "वारागुङ मुक्तिक्षेत्रगाउँपालिका"),
("अन्नपूर्ण गाउँपालिका", "अन्नपूर्ण गाउँपालिका"),
("रघुगंगा गाउँपालिका", "रघुगंगा गाउँपालिका"),
("धवलागिरी गाउँपालिका", "धवलागिरी गाउँपालिका"),
("मालिका गाउँपालिका", "मालिका गाउँपालिका"),
("मंगला गाउँपालिका", "मंगला गाउँपालिका"),
("बेनी नगरपालिका", "बेनी नगरपालिका"),
("मादी गाउँपालिका", "मादी गाउँपालिका"),
("माछापुच्छ्रे गाउँपालिका", "माछापुच्छ्रे गाउँपालिका"),
("पोखरा महानगरपालिका", "पोखरा महानगरपालिका"),
("रूपा गाउँपालिका", "रूपा गाउँपालिका"),
("माछापुच्छ्रे गाउँपालिका", "माछापुच्छ्रे गाउँपालिका"),
("दोर्दी गाउँपालिका", "दोर्दी गाउँपालिका"),
("मर्स्याङदी गाउँपालिका", "मर्स्याङदी गाउँपालिका"),
("मध्यनेपाल नगरपालिका", "मध्यनेपाल नगरपालिका"),
("बेसीशहर नगरपालिका", "बेसीशहर नगरपालिका"),
("राईनास नगरपालिका", "राईनास नगरपालिका"),
("क्व्होलासोथार गाउँपालिका", "क्व्होलासोथार गाउँपालिका"),
("सुन्दरबजार नगरपालिका", "सुन्दरबजार नगरपालिका"),
("दूधपोखरी गाउँपालिका", "दूधपोखरी गाउँपालिका"),
("भानु नगरपालिका", "भानु नगरपालिका"),
("व्यास नगरपालिका", "व्यास नगरपालिका"),
("म्याग्दे गाउँपालिका", "म्याग्दे गाउँपालिका"),
("शुक्लागण्डकी नगरपालिका", "शुक्लागण्डकी नगरपालिका"),
("भिमाद नगरपालिका", "भिमाद नगरपालिका"),
("घिरिङ गाउँपालिका", "घिरिङ गाउँपालिका"),
("देवघाट गाउँपालिका", "देवघाट गाउँपालिका"),
("बन्दिपुर गाउँपालिका", "बन्दिपुर गाउँपालिका"),
("आँबूखैरेनी गाउँपालिका", "आँबूखैरेनी गाउँपालिका"),
("ऋषिङ्ग गाउँपालिका", "ऋषिङ्ग गाउँपालिका"),
("गैंडाकोट नगरपालिका", "गैंडाकोट नगरपालिका"),
("बुलिङटार गाउँपालिका", "बुलिङटार गाउँपालिका"),
("हुप्सेकोट गाउँपालिका", "हुप्सेकोट गाउँपालिका"),
("देवचुली नगरपालिका", "देवचुली नगरपालिका"),
("कावासोती नगरपालिका", "कावासोती नगरपालिका"),
("मध्यविन्दु नगरपालिका", "मध्यविन्दु नगरपालिका"),
("विनयी त्रिवेणी गाउँपालिका", "विनयी त्रिवेणी गाउँपालिका"),
("बौदीकाली गाउँपालिका", "बौदीकाली गाउँपालिका"),
("फेदीखोला गाउँपालिका", "फेदीखोला गाउँपालिका"),
("आँधिखोला गाउँपालिका", "आँधिखोला गाउँपालिका"),
("अर्जुनचौपारी गाउँपालिका", "अर्जुनचौपारी गाउँपालिका"),
("भीरकोट नगरपालिका", "भीरकोट नगरपालिका"),
("विरुवा गाउँपालिका", "विरुवा गाउँपालिका"),
("चापाकोट नगरपालिका", "चापाकोट नगरपालिका"),
("वालिङ नगरपालिका", "वालिङ नगरपालिका"),
("गल्याङ नगरपालिका", "गल्याङ नगरपालिका"),
("कालीगण्डकी गाउँपालिका", "कालीगण्डकी गाउँपालिका"),
("पुतलीबजार नगरपालिका", "पुतलीबजार नगरपालिका"),
("हरिनास गाउँपालिका", "हरिनास गाउँपालिका"),
("मोदी गाउँपालिका", "मोदी गाउँपालिका"),
("कुश्मा नगरपालिका", "कुश्मा नगरपालिका"),
("फलेवास नगरपालिका", "फलेवास नगरपालिका"),
("महाशिला गाउँपालिका", "महाशिला गाउँपालिका"),
("विहादी गाउँपालिका", "विहादी गाउँपालिका"),
("पैयूँ गाउँपालिका", "पैयूँ गाउँपालिका"),
("जलजला गाउँपालिका", "जलजला गाउँपालिका"),
("बाग्लुङ नगरपालिका", "बाग्लुङ नगरपालिका"),
("ताराखोला गाउँपालिका", "ताराखोला गाउँपालिका"),
("तमानखोला गाउँपालिका", "तमानखोला गाउँपालिका"),
("ढोरपाटन नगरपालिका", "ढोरपाटन नगरपालिका"),
("निसीखोला गाउँपालिका", "निसीखोला गाउँपालिका"),
("वडिगाड गाउँपालिका", "वडिगाड गाउँपालिका"),
("गल्कोट नगरपालिका", "गल्कोट नगरपालिका"),
("जैमिनी नगरपालिका", "जैमिनी नगरपालिका"),
("काठेखोला गाउँपालिका", "काठेखोला गाउँपालिका"),
("बरेङ गाउँपालिका", "बरेङ गाउँपालिका"),
("गौरीशंकर गाउँपालिका", "गौरीशंकर गाउँपालिका"),
("विगु गाउँपालिका", "विगु गाउँपालिका"),
("कालिन्चोक गाउँपालिका", "कालिन्चोक गाउँपालिका"),
("जिरी नगरपालिका", "जिरी नगरपालिका"),
("तामाकोशी गाउँपालिका", "तामाकोशी गाउँपालिका"),
("मेलुङ गाउँपालिका", "मेलुङ गाउँपालिका"),
("शैलुङ गाउँपालिका", "शैलुङ गाउँपालिका"),
("भीमेश्वर नगरपालिका", "भीमेश्वर नगरपालिका"),
("वैतेश्वर गाउँपालिका", "वैतेश्वर गाउँपालिका"),
("जुगल गाउँपालिका", "जुगल गाउँपालिका"),
("पाँचपोखरी थाङपाल गाउँपालिका", "पाँचपोखरी थाङपाल गाउँपालिका"),
("हेलम्बु गाउँपालिका", "हेलम्बु गाउँपालिका"),
("चौतारा साँगाचोकगढी नगरपालिका", "चौतारा साँगाचोकगढी नगरपालिका"),
("बलेफी गाउँपालिका", "बलेफी गाउँपालिका"),
("बाह्रविसे नगरपालिका", "बाह्रविसे नगरपालिका"),
("लिसंखु पाखर गाउँपालिका", "लिसंखु पाखर गाउँपालिका"),
("सुनकोशी गाउँपालिका", "सुनकोशी गाउँपालिका"),
("भोटेकोशी गाउँपालिका", "भोटेकोशी गाउँपालिका"),
("मेलम्ची नगरपालिका", "मेलम्ची नगरपालिका"),
("ईन्द्रावती गाउँपालिका", "ईन्द्रावती गाउँपालिका"),
("त्रिपुरासुन्दरी गाउँपालिका", "त्रिपुरासुन्दरी गाउँपालिका"),
("गोसाईकुण्ड गाउँपालिका", "गोसाईकुण्ड गाउँपालिका"),
("आमाछोदिङ्मो गाउँपालिका", "आमाछोदिङ्मो गाउँपालिका"),
("उत्तरगया गाउँपालिका", "उत्तरगया गाउँपालिका"),
("कालिका गाउँपालिका", "कालिका गाउँपालिका"),
("नौकुण्ड गाउँपालिका", "नौकुण्ड गाउँपालिका"),
("खनियाबास गाउँपालिका", "खनियाबास गाउँपालिका"),
("गंगाजमुना गाउँपालिका", "गंगाजमुना गाउँपालिका"),
("त्रिपुरासुन्दरी गाउँपालिका", "त्रिपुरासुन्दरी गाउँपालिका"),
("नेत्रावती डबजोङ गाउँपालिका", "नेत्रावती डबजोङ गाउँपालिका"),
("नीलकण्ठ नगरपालिका", "नीलकण्ठ नगरपालिका"),
("सिद्धलेक गाउँपालिका", "सिद्धलेक गाउँपालिका"),
("वेनीघाट रोराङ गाउँपालिका", "वेनीघाट रोराङ गाउँपालिका"),
("गजुरी गाउँपालिका", "गजुरी गाउँपालिका"),
("गल्छी गाउँपालिका", "गल्छी गाउँपालिका"),
("थाक्रे गाउँपालिका", "थाक्रे गाउँपालिका"),
("धुनिवेशी नगरपालिका", "धुनिवेशी नगरपालिका"),
("रुबी भ्याली गाउँपालिका", "रुबी भ्याली गाउँपालिका"),
("ज्वालामूखी गाउँपालिका", "ज्वालामूखी गाउँपालिका"),
("तादी गाउँपालिका", "तादी गाउँपालिका"),
("सुर्यगढी गाउँपालिका", "सुर्यगढी गाउँपालिका"),
("विदुर नगरपालिका", "विदुर नगरपालिका"),
("किस्पाङ गाउँपालिका", "किस्पाङ गाउँपालिका"),
("म्यागङ गाउँपालिका", "म्यागङ गाउँपालिका"),
("बेलकोटगढी नगरपालिका", "बेलकोटगढी नगरपालिका"),
("लिखु गाउँपालिका", "लिखु गाउँपालिका"),
("पञ्चकन्या गाउँपालिका", "पञ्चकन्या गाउँपालिका"),
("शिवपुरी गाउँपालिका", "शिवपुरी गाउँपालिका"),
("ककनी गाउँपालिका", "ककनी गाउँपालिका"),
("दुप्चेश्वर गाउँपालिका", "दुप्चेश्वर गाउँपालिका"),
("तारकेश्वर गाउँपालिका", "तारकेश्वर गाउँपालिका"),
("कागेश्वरी मनोहरा नगरपालिका", "कागेश्वरी मनोहरा नगरपालिका"),
("गोकर्णेश्वर नगरपालिका", "गोकर्णेश्वर नगरपालिका"),
("बूढानीलकण्ठ नगरपालिका", "बूढानीलकण्ठ नगरपालिका"),
("टोखा नगरपालिका", "टोखा नगरपालिका"),
("तारकेश्वर नगरपालिका", "तारकेश्वर नगरपालिका"),
("नागार्जुन नगरपालिका", "नागार्जुन नगरपालिका"),
("कीर्तिपुर नगरपालिका", "कीर्तिपुर नगरपालिका"),
("दक्षिणकाली नगरपालिका", "दक्षिणकाली नगरपालिका"),
("शङ्खरापुर नगरपालिका", "शङ्खरापुर नगरपालिका"),
("काठमाडौँ महानगरपालिका", "काठमाडौँ महानगरपालिका"),
("चन्द्रागिरी नगरपालिका", "चन्द्रागिरी नगरपालिका"),
("भक्तपुर नगरपालिका", "भक्तपुर नगरपालिका"),
("मध्यपुर थिमि नगरपालिका", "मध्यपुर थिमि नगरपालिका"),
("सूर्यविनायक नगरपालिका", "सूर्यविनायक नगरपालिका"),
("चाँगुनारायण नगरपालिका", "चाँगुनारायण नगरपालिका"),
("महालक्ष्मी नगरपालिका", "महालक्ष्मी नगरपालिका"),
("ललितपुर महानगरपालिका", "ललितपुर महानगरपालिका"),
("गोदावरी नगरपालिका", "गोदावरी नगरपालिका"),
("महाङ्काल गाउँपालिका", "महाङ्काल गाउँपालिका"),
("वाग्मती गाउँपालिका", "वाग्मती गाउँपालिका"),
("कोन्ज्योसोम गाउँपालिका", "कोन्ज्योसोम गाउँपालिका"),
("चौंरीदेउराली गाउँपालिका", "चौंरीदेउराली गाउँपालिका"),
("भुम्लु गाउँपालिका", "भुम्लु गाउँपालिका"),
("मण्डनदेउपुर नगरपालिका", "मण्डनदेउपुर नगरपालिका"),
("बनेपा नगरपालिका", "बनेपा नगरपालिका"),
("पाँचखाल नगरपालिका", "पाँचखाल नगरपालिका"),
("तेमाल गाउँपालिका", "तेमाल गाउँपालिका"),
("नमोबुद्ध नगरपालिका", "नमोबुद्ध नगरपालिका"),
("पनौती नगरपालिका", "पनौती नगरपालिका"),
("रोशी गाउँपालिका", "रोशी गाउँपालिका"),
("महाभारत गाउँपालिका", "महाभारत गाउँपालिका"),
("खानीखोला गाउँपालिका", "खानीखोला गाउँपालिका"),
("धुलिखेल नगरपालिका", "धुलिखेल नगरपालिका"),
("बेथानचोक गाउँपालिका", "बेथानचोक गाउँपालिका"),
("उमाकुण्ड गाउँपालिका", "उमाकुण्ड गाउँपालिका"),
("गोकुलगंगा गाउँपालिका", "गोकुलगंगा गाउँपालिका"),
("लिखु गाउँपालिका", "लिखु गाउँपालिका"),
("मन्थली नगरपालिका", "मन्थली नगरपालिका"),
("खाँडादेवी गाउँपालिका", "खाँडादेवी गाउँपालिका"),
("दोरम्बा शैलुङ गाउँपालिका", "दोरम्बा शैलुङ गाउँपालिका"),
("सुनापति गाउँपालिका", "सुनापति गाउँपालिका"),
("रामेछाप नगरपालिका", "रामेछाप नगरपालिका"),
("दुधौली नगरपालिका", "दुधौली नगरपालिका"),
("तीनपाटन गाउँपालिका", "तीनपाटन गाउँपालिका"),
("गोलन्जोर गाउँपालिका", "गोलन्जोर गाउँपालिका"),
("कमलामाई नगरपालिका", "कमलामाई नगरपालिका"),
("सुनकोशी गाउँपालिका", "सुनकोशी गाउँपालिका"),
("मरिण गाउँपालिका", "मरिण गाउँपालिका"),
("हरिहरपुरगढी गाउँपालिका", "हरिहरपुरगढी गाउँपालिका"),
("फिक्कल गाउँपालिका", "फिक्कल गाउँपालिका"),
("घ्याङलेख गाउँपालिका", "घ्याङलेख गाउँपालिका"),
("इन्द्रसरोवर गाउँपालिका", "इन्द्रसरोवर गाउँपालिका"),
("थाहा नगरपालिका", "थाहा नगरपालिका"),
("कैलाश गाउँपालिका", "कैलाश गाउँपालिका"),
("मनहरी गाउँपालिका", "मनहरी गाउँपालिका"),
("हेटौडा उप-महानगरपालिका", "हेटौडा उप-महानगरपालिका"),
("मकवानपुरगढी गाउँपालिका", "मकवानपुरगढी गाउँपालिका"),
("बकैया गाउँपालिका", "बकैया गाउँपालिका"),
("बागमती गाउँपालिका", "बागमती गाउँपालिका"),
("राक्सिराङ्ग गाउँपालिका", "राक्सिराङ्ग गाउँपालिका"),
("भीमफेदी गाउँपालिका", "भीमफेदी गाउँपालिका"),
("राप्ती नगरपालिका", "राप्ती नगरपालिका"),
("कालिका नगरपालिका", "कालिका नगरपालिका"),
("भरतपुर महानगरपालिका", "भरतपुर महानगरपालिका"),
("रत्ननगर नगरपालिका", "रत्ननगर नगरपालिका"),
("खैरहनी नगरपालिका", "खैरहनी नगरपालिका"),
("माडी नगरपालिका", "माडी नगरपालिका"),
("इच्छाकामना गाउँपालिका", "इच्छाकामना गाउँपालिका"),
("सिस्ने गाउँपालिका", "सिस्ने गाउँपालिका"),
("भूमे गाउँपालिका", "भूमे गाउँपालिका"),
("पुथा उत्तरगंगा गाउँपालिका", "पुथा उत्तरगंगा गाउँपालिका"),
("सुनछहरी गाउँपालिका", "सुनछहरी गाउँपालिका"),
("थबाङ गाउँपालिका", "थबाङ गाउँपालिका"),
("दुईखोली गाउँपालिका", "दुईखोली गाउँपालिका"),
("मादी गाउँपालिका", "मादी गाउँपालिका"),
("त्रिवेणी गाउँपालिका", "त्रिवेणी गाउँपालिका"),
("रोल्पा नगरपालिका", "रोल्पा नगरपालिका"),
("रुन्टीगढी गाउँपालिका", "रुन्टीगढी गाउँपालिका"),
("सुनिलस्मृति गाउँपालिका", "सुनिलस्मृति गाउँपालिका"),
("लुङग्री गाउँपालिका", "लुङग्री गाउँपालिका"),
("गङ्गादेव गाउँपालिका", "गङ्गादेव गाउँपालिका"),
("नौबहिनी गाउँपालिका", "नौबहिनी गाउँपालिका"),
("झिमरुक गाउँपालिका", "झिमरुक गाउँपालिका"),
("प्यूठान नगरपालिका", "प्यूठान नगरपालिका"),
("स्वर्गद्वारी नगरपालिका", "स्वर्गद्वारी नगरपालिका"),
("माण्डवी गाउँपालिका", "माण्डवी गाउँपालिका"),
("ऐरावती गाउँपालिका", "ऐरावती गाउँपालिका"),
("सरुमारानी गाउँपालिका", "सरुमारानी गाउँपालिका"),
("गौमुखी गाउँपालिका", "गौमुखी गाउँपालिका"),
("मल्लरा गाउँपालिका", "मल्लरा गाउँपालिका"),
("कालीगण्डकी गाउँपालिका", "कालीगण्डकी गाउँपालिका"),
("सत्यवती गाउँपालिका", "सत्यवती गाउँपालिका"),
("मुसिकोट नगरपालिका", "मुसिकोट नगरपालिका"),
("इस्मा गाउँपालिका", "इस्मा गाउँपालिका"),
("मालिका गाउँपालिका", "मालिका गाउँपालिका"),
("मदाने गाउँपालिका", "मदाने गाउँपालिका"),
("धुर्कोट गाउँपालिका", "धुर्कोट गाउँपालिका"),
("रेसुङ्गा नगरपालिका", "रेसुङ्गा नगरपालिका"),
("छत्रकोट गाउँपालिका", "छत्रकोट गाउँपालिका"),
("रुरुक्षेत्र गाउँपालिका", "रुरुक्षेत्र गाउँपालिका"),
("चन्द्रकोट गाउँपालिका", "चन्द्रकोट गाउँपालिका"),
("गुल्मी दरबार गाउँपालिका", "गुल्मी दरबार गाउँपालिका"),
("छत्रदेव गाउँपालिका", "छत्रदेव गाउँपालिका"),
("मालारानी गाउँपालिका", "मालारानी गाउँपालिका"),
("भुमिकास्थान नगरपालिका", "भुमिकास्थान नगरपालिका"),
("सन्धिखर्क नगरपालिका", "सन्धिखर्क नगरपालिका"),
("शितगंगा नगरपालिका", "शितगंगा नगरपालिका"),
("पाणिनी गाउँपालिका", "पाणिनी गाउँपालिका"),
("रामपुर नगरपालिका", "रामपुर नगरपालिका"),
("पूर्वखोला गाउँपालिका", "पूर्वखोला गाउँपालिका"),
("रम्भा गाउँपालिका", "रम्भा गाउँपालिका"),
("बगनासकाली गाउँपालिका", "बगनासकाली गाउँपालिका"),
("तानसेन नगरपालिका", "तानसेन नगरपालिका"),
("रैनादेवी छहरा गाउँपालिका", "रैनादेवी छहरा गाउँपालिका"),
("माथागढी गाउँपालिका", "माथागढी गाउँपालिका"),
("रिब्दीकोट गाउँपालिका", "रिब्दीकोट गाउँपालिका"),
("तिनाउ गाउँपालिका", "तिनाउ गाउँपालिका"),
("निस्दी गाउँपालिका", "निस्दी गाउँपालिका"),
("देवदह नगरपालिका", "देवदह नगरपालिका"),
("बुटवल उप-महानगरपालिका", "बुटवल उप-महानगरपालिका"),
("सैनामैना नगरपालिका", "सैनामैना नगरपालिका"),
("कञ्चन गाउँपालिका", "कञ्चन गाउँपालिका"),
("शुद्धोधन गाउँपालिका", "शुद्धोधन गाउँपालिका"),
("सियारी गाउँपालिका", "सियारी गाउँपालिका"),
("तिलोत्तमा नगरपालिका", "तिलोत्तमा नगरपालिका"),
("ओमसतिया गाउँपालिका", "ओमसतिया गाउँपालिका"),
("रोहिणी गाउँपालिका", "रोहिणी गाउँपालिका"),
("मायादेवी गाउँपालिका", "मायादेवी गाउँपालिका"),
("लुम्बिनी साँस्कृतिक नगरपालिका", "लुम्बिनी साँस्कृतिक नगरपालिका"),
("कोटहीमाई गाउँपालिका", "कोटहीमाई गाउँपालिका"),
("सम्मरीमाई गाउँपालिका", "सम्मरीमाई गाउँपालिका"),
("मर्चवारी गाउँपालिका", "मर्चवारी गाउँपालिका"),
("गैडहवा गाउँपालिका", "गैडहवा गाउँपालिका"),
("सिद्धार्थनगर नगरपालिका", "सिद्धार्थनगर नगरपालिका"),
("वाणगङ्गा नगरपालिका", "वाणगङ्गा नगरपालिका"),
("शिवराज नगरपालिका", "शिवराज नगरपालिका"),
("विजयनगर गाउँपालिका", "विजयनगर गाउँपालिका"),
("कृष्णनगर नगरपालिका", "कृष्णनगर नगरपालिका"),
("महाराजगंज नगरपालिका", "महाराजगंज नगरपालिका"),
("यसोधरा गाउँपालिका", "यसोधरा गाउँपालिका"),
("मायादेवी गाउँपालिका", "मायादेवी गाउँपालिका"),
("शुद्धोधन गाउँपालिका", "शुद्धोधन गाउँपालिका"),
("बुद्धभूमि नगरपालिका", "बुद्धभूमि नगरपालिका"),
("कपिलवस्तु नगरपालिका", "कपिलवस्तु नगरपालिका"),
("बंगलाचुली गाउँपालिका", "बंगलाचुली गाउँपालिका"),
("तुलसीपुर उप-महानगरपालिका", "तुलसीपुर उप-महानगरपालिका"),
("शान्तिनगर गाउँपालिका", "शान्तिनगर गाउँपालिका"),
("बबई गाउँपालिका", "बबई गाउँपालिका"),
("दंगीशरण गाउँपालिका", "दंगीशरण गाउँपालिका"),
("लमही नगरपालिका", "लमही नगरपालिका"),
("घोराही उप-महानगरपालिका", "घोराही उप-महानगरपालिका"),
("राप्ती गाउँपालिका", "राप्ती गाउँपालिका"),
("गढवा गाउँपालिका", "गढवा गाउँपालिका"),
("राजपुर गाउँपालिका", "राजपुर गाउँपालिका"),
("खजुरा गाउँपालिका", "खजुरा गाउँपालिका"),
("जानकी गाउँपालिका", "जानकी गाउँपालिका"),
("राप्ती सोनारी गाउँपालिका", "राप्ती सोनारी गाउँपालिका"),
("कोहलपुर नगरपालिका", "कोहलपुर नगरपालिका"),
("बैजनाथ गाउँपालिका", "बैजनाथ गाउँपालिका"),
("नेपालगन्ज उप-महानगरपालिका", "नेपालगन्ज उप-महानगरपालिका"),
("डुडुवा गाउँपालिका", "डुडुवा गाउँपालिका"),
("नरैनापुर गाउँपालिका", "नरैनापुर गाउँपालिका"),
("ठाकुरबाबा नगरपालिका", "ठाकुरबाबा नगरपालिका"),
("गेरुवा गाउँपालिका", "गेरुवा गाउँपालिका"),
("राजापुर नगरपालिका", "राजापुर नगरपालिका"),
("मधुवन नगरपालिका", "मधुवन नगरपालिका"),
("बाँसगढी नगरपालिका", "बाँसगढी नगरपालिका"),
("बारबर्दिया नगरपालिका", "बारबर्दिया नगरपालिका"),
("गुलरिया नगरपालिका", "गुलरिया नगरपालिका"),
("बढैयाताल गाउँपालिका", "बढैयाताल गाउँपालिका"),
("बर्दघाट नगरपालिका", "बर्दघाट नगरपालिका"),
("सुनवल नगरपालिका", "सुनवल नगरपालिका"),
("रामग्राम नगरपालिका", "रामग्राम नगरपालिका"),
("पाल्हीनन्दन गाउँपालिका", "पाल्हीनन्दन गाउँपालिका"),
("सरावल गाउँपालिका", "सरावल गाउँपालिका"),
("सुस्ता गाउँपालिका", "सुस्ता गाउँपालिका"),
("प्रतापपुर गाउँपालिका", "प्रतापपुर गाउँपालिका"),
("मुड्केचुला गाउँपालिका", "मुड्केचुला गाउँपालिका"),
("त्रिपुरासुन्दरी नगरपालिका", "त्रिपुरासुन्दरी नगरपालिका"),
("ठुली भेरी नगरपालिका", "ठुली भेरी नगरपालिका"),
("काईके गाउँपालिका", "काईके गाउँपालिका"),
("छार्का ताङसोङ गाउँपालिका", "छार्का ताङसोङ गाउँपालिका"),
("शे फोक्सुण्डो गाउँपालिका", "शे फोक्सुण्डो गाउँपालिका"),
("जगदुल्ला गाउँपालिका", "जगदुल्ला गाउँपालिका"),
("डोल्पो बुद्ध गाउँपालिका", "डोल्पो बुद्ध गाउँपालिका"),
("मुगूम कार्मारोङ गाउँपालिका", "मुगूम कार्मारोङ गाउँपालिका"),
("छायाँनाथ रारा नगरपालिका", "छायाँनाथ रारा नगरपालिका"),
("खत्याड गाउँपालिका", "खत्याड गाउँपालिका"),
("सोरु गाउँपालिका", "सोरु गाउँपालिका"),
("पातारासी गाउँपालिका", "पातारासी गाउँपालिका"),
("कनकासुन्दरी गाउँपालिका", "कनकासुन्दरी गाउँपालिका"),
("सिंजा गाउँपालिका", "सिंजा गाउँपालिका"),
("चन्दननाथ नगरपालिका", "चन्दननाथ नगरपालिका"),
("गुठिचौर गाउँपालिका", "गुठिचौर गाउँपालिका"),
("तातोपानी गाउँपालिका", "तातोपानी गाउँपालिका"),
("तिला गाउँपालिका", "तिला गाउँपालिका"),
("हिमा गाउँपालिका", "हिमा गाउँपालिका"),
("महावै गाउँपालिका", "महावै गाउँपालिका"),
("कालिका गाउँपालिका", "कालिका गाउँपालिका"),
("पलाँता गाउँपालिका", "पलाँता गाउँपालिका"),
("पचालझरना गाउँपालिका", "पचालझरना गाउँपालिका"),
("रास्कोट नगरपालिका", "रास्कोट नगरपालिका"),
("सान्नी त्रिवेणी गाउँपालिका", "सान्नी त्रिवेणी गाउँपालिका"),
("नरहरिनाथ गाउँपालिका", "नरहरिनाथ गाउँपालिका"),
("खाँडाचक्र नगरपालिका", "खाँडाचक्र नगरपालिका"),
("तिलागुफा नगरपालिका", "तिलागुफा नगरपालिका"),
("नौमुले गाउँपालिका", "नौमुले गाउँपालिका"),
("महाबु गाउँपालिका", "महाबु गाउँपालिका"),
("भैरवी गाउँपालिका", "भैरवी गाउँपालिका"),
("ठाटीकाँध गाउँपालिका", "ठाटीकाँध गाउँपालिका"),
("आठबीस नगरपालिका", "आठबीस नगरपालिका"),
("चामुण्डा बिन्द्रासैनी नगरपालिका", "चामुण्डा बिन्द्रासैनी नगरपालिका"),
("दुल्लू नगरपालिका", "दुल्लू नगरपालिका"),
("नारायण नगरपालिका", "नारायण नगरपालिका"),
("भगवतीमाई गाउँपालिका", "भगवतीमाई गाउँपालिका"),
("डुङ्गेश्वर गाउँपालिका", "डुङ्गेश्वर गाउँपालिका"),
("गुराँस गाउँपालिका", "गुराँस गाउँपालिका"),
("शिवालय गाउँपालिका", "शिवालय गाउँपालिका"),
("भेरी नगरपालिका", "भेरी नगरपालिका"),
("त्रिवेणी नलगाड नगरपालिका", "त्रिवेणी नलगाड नगरपालिका"),
("बारेकोट गाउँपालिका", "बारेकोट गाउँपालिका"),
("कुसे गाउँपालिका", "कुसे गाउँपालिका"),
("जुनीचाँदे गाउँपालिका", "जुनीचाँदे गाउँपालिका"),
("छेडागाड नगरपालिका", "छेडागाड नगरपालिका"),
("दार्मा गाउँपालिका", "दार्मा गाउँपालिका"),
("कुमाख गाउँपालिका", "कुमाख गाउँपालिका"),
("बनगाड कुपिण्डे नगरपालिका", "बनगाड कुपिण्डे नगरपालिका"),
("ढोरचौर गाउँपालिका", "ढोरचौर गाउँपालिका"),
("बागचौर नगरपालिका", "बागचौर नगरपालिका"),
("छत्रेश्वरी गाउँपालिका", "छत्रेश्वरी गाउँपालिका"),
("शारदा नगरपालिका", "शारदा नगरपालिका"),
("कालिमाटी गाउँपालिका", "कालिमाटी गाउँपालिका"),
("त्रिवेणी गाउँपालिका", "त्रिवेणी गाउँपालिका"),
("कपुरकोट गाउँपालिका", "कपुरकोट गाउँपालिका"),
("सिम्ता गाउँपालिका", "सिम्ता गाउँपालिका"),
("चिङ्गाड गाउँपालिका", "चिङ्गाड गाउँपालिका"),
("लेकबेशी नगरपालिका", "लेकबेशी नगरपालिका"),
("गुर्भाकोट नगरपालिका", "गुर्भाकोट नगरपालिका"),
("भेरीगंगा नगरपालिका", "भेरीगंगा नगरपालिका"),
("वीरेन्द्रनगर नगरपालिका", "वीरेन्द्रनगर नगरपालिका"),
("बराहताल गाउँपालिका", "बराहताल गाउँपालिका"),
("पञ्चपुरी नगरपालिका", "पञ्चपुरी नगरपालिका"),
("चौकुने गाउँपालिका", "चौकुने गाउँपालिका"),
("चंखेली गाउँपालिका", "चंखेली गाउँपालिका"),
("खार्पूनाथ गाउँपालिका", "खार्पूनाथ गाउँपालिका"),
("सिमकोट गाउँपालिका", "सिमकोट गाउँपालिका"),
("नाम्खा गाउँपालिका", "नाम्खा गाउँपालिका"),
("सर्केगाड गाउँपालिका", "सर्केगाड गाउँपालिका"),
("अदानचुली गाउँपालिका", "अदानचुली गाउँपालिका"),
("ताँजाकोट गाउँपालिका", "ताँजाकोट गाउँपालिका"),
("आठबिसकोट नगरपालिका", "आठबिसकोट नगरपालिका"),
("सानीभेरी गाउँपालिका", "सानीभेरी गाउँपालिका"),
("बाँफिकोट गाउँपालिका", "बाँफिकोट गाउँपालिका"),
("मुसिकोट नगरपालिका", "मुसिकोट नगरपालिका"),
("त्रिवेणी गाउँपालिका", "त्रिवेणी गाउँपालिका"),
("चौरजहारी नगरपालिका", "चौरजहारी नगरपालिका"),
("मिक्वाखोला गाउँपालिका", "मिक्वाखोला गाउँपालिका"),
("मैवाखोला गाउँपालिका", "मैवाखोला गाउँपालिका"),
("आठराई त्रिवेणी गाउँपालिका", "आठराई त्रिवेणी गाउँपालिका"),
("फुङ्लिङ नगरपालिका", "फुङ्लिङ नगरपालिका"),
("पाथीभरा याङवरक गाउँपालिका", "पाथीभरा याङवरक गाउँपालिका"),
("सिरीजङ्घा गाउँपालिका", "सिरीजङ्घा गाउँपालिका"),
("फक्ताङलुङ गाउँपालिका", "फक्ताङलुङ गाउँपालिका"),
("मेरीङदेन गाउँपालिका", "मेरीङदेन गाउँपालिका"),
("सिदिङ्वा गाउँपालिका", "सिदिङ्वा गाउँपालिका"),
("भोटखोला गाउँपालिका", "भोटखोला गाउँपालिका"),
("मकालु गाउँपालिका", "मकालु गाउँपालिका"),
("सिलिचोङ गाउँपालिका", "सिलिचोङ गाउँपालिका"),
("चिचिला गाउँपालिका", "चिचिला गाउँपालिका"),
("सभापोखरी गाउँपालिका", "सभापोखरी गाउँपालिका"),
("पाँचखपन नगरपालिका", "पाँचखपन नगरपालिका"),
("चैनपुर नगरपालिका", "चैनपुर नगरपालिका"),
("मादी नगरपालिका", "मादी नगरपालिका"),
("धर्मदेवी नगरपालिका", "धर्मदेवी नगरपालिका"),
("खाँदवारी नगरपालिका", "खाँदवारी नगरपालिका"),
("महाकुलुङ गाउँपालिका", "महाकुलुङ गाउँपालिका"),
("सोताङ गाउँपालिका", "सोताङ गाउँपालिका"),
("थुलुङ दुधकोशी गाउँपालिका", "थुलुङ दुधकोशी गाउँपालिका"),
("दुधकोशी गाउँपालिका", "दुधकोशी गाउँपालिका"),
("नेचासल्यान गाउँपालिका", "नेचासल्यान गाउँपालिका"),
("सोलुदुधकुण्ड नगरपालिका", "सोलुदुधकुण्ड नगरपालिका"),
("लिखु पिके गाउँपालिका", "लिखु पिके गाउँपालिका"),
("खुम्बु पासाङल्हामु गाउँपालिका", "खुम्बु पासाङल्हामु गाउँपालिका"),
("सिद्धिचरण नगरपालिका", "सिद्धिचरण नगरपालिका"),
("मोलुङ गाउँपालिका", "मोलुङ गाउँपालिका"),
("खिजीदेम्वा गाउँपालिका", "खिजीदेम्वा गाउँपालिका"),
("लिखु गाउँपालिका", "लिखु गाउँपालिका"),
("चम्पादेवी गाउँपालिका", "चम्पादेवी गाउँपालिका"),
("सुनकोशी गाउँपालिका", "सुनकोशी गाउँपालिका"),
("चिशंखुगढी गाउँपालिका", "चिशंखुगढी गाउँपालिका"),
("मानेभञ्ज्याङ गाउँपालिका", "मानेभञ्ज्याङ गाउँपालिका"),
("केपिलासगढी गाउँपालिका", "केपिलासगढी गाउँपालिका"),
("ऐसेलुखर्क गाउँपालिका", "ऐसेलुखर्क गाउँपालिका"),
("लामिडाँडा गाउँपालिका", "लामिडाँडा गाउँपालिका"),
("हलेसी तुवाचुङ नगरपालिका", "हलेसी तुवाचुङ नगरपालिका"),
("साकेला गाउँपालिका", "साकेला गाउँपालिका"),
("दिप्रुङ गाउँपालिका", "दिप्रुङ गाउँपालिका"),
("खोटेहाङ गाउँपालिका", "खोटेहाङ गाउँपालिका"),
("जन्तेढुङ्गा गाउँपालिका", "जन्तेढुङ्गा गाउँपालिका"),
("बराहपोखरी गाउँपालिका", "बराहपोखरी गाउँपालिका"),
(
"दिक्तेल रुपाकोट मझुवागढी नगरपालिका",
"दिक्तेल रुपाकोट मझुवागढी नगरपालिका",
),
("षडानन्द नगरपालिका", "षडानन्द नगरपालिका"),
("टेम्केमैयुङ गाउँपालिका", "टेम्केमैयुङ गाउँपालिका"),
("भोजपुर नगरपालिका", "भोजपुर नगरपालिका"),
("पौवादुङमा गाउँपालिका", "पौवादुङमा गाउँपालिका"),
("रामप्रसादराई गाउँपालिका", "रामप्रसादराई गाउँपालिका"),
("हतुवागढी गाउँपालिका", "हतुवागढी गाउँपालिका"),
("आमचोक गाउँपालिका", "आमचोक गाउँपालिका"),
("साल्पासिलिछो गाउँपालिका", "साल्पासिलिछो गाउँपालिका"),
("अरुण गाउँपालिका", "अरुण गाउँपालिका"),
("पाख्रिबास नगरपालिका", "पाख्रिबास नगरपालिका"),
("छथर जोरपाटी गाउँपालिका", "छथर जोरपाटी गाउँपालिका"),
("धनकुटा नगरपालिका", "धनकुटा नगरपालिका"),
("साँगुरीगढी गाउँपालिका", "साँगुरीगढी गाउँपालिका"),
("चौबिसे गाउँपालिका", "चौबिसे गाउँपालिका"),
("महालक्ष्मी नगरपालिका", "महालक्ष्मी नगरपालिका"),
("सहिदभूमि गाउँपालिका", "सहिदभूमि गाउँपालिका"),
("आठराई त्रिवेणी गाउँपालिका", "आठराई त्रिवेणी गाउँपालिका"),
("फेदाप गाउँपालिका", "फेदाप गाउँपालिका"),
("मेन्छयायेम गाउँपालिका", "मेन्छयायेम गाउँपालिका"),
("म्याङलुङ नगरपालिका", "म्याङलुङ नगरपालिका"),
("लालीगुराँस नगरपालिका", "लालीगुराँस नगरपालिका"),
("छथर गाउँपालिका", "छथर गाउँपालिका"),
("हिलिहाङ गाउँपालिका", "हिलिहाङ गाउँपालिका"),
("फालेलुङ गाउँपालिका", "फालेलुङ गाउँपालिका"),
("फिदिम नगरपालिका", "फिदिम नगरपालिका"),
("फाल्गुनन्द गाउँपालिका", "फाल्गुनन्द गाउँपालिका"),
("कुम्मायक गाउँपालिका", "कुम्मायक गाउँपालिका"),
("मिक्लाजुङ गाउँपालिका", "मिक्लाजुङ गाउँपालिका"),
("याङवरक गाउँपालिका", "याङवरक गाउँपालिका"),
("तुम्वेवा गाउँपालिका", "तुम्वेवा गाउँपालिका"),
("माईजोगमाई गाउँपालिका", "माईजोगमाई गाउँपालिका"),
("सन्दकपुर गाउँपालिका", "सन्दकपुर गाउँपालिका"),
("इलाम नगरपालिका", "इलाम नगरपालिका"),
("देउमाई नगरपालिका", "देउमाई नगरपालिका"),
("माङसेबुङ गाउँपालिका", "माङसेबुङ गाउँपालिका"),
("चुलाचुली गाउँपालिका", "चुलाचुली गाउँपालिका"),
("माई नगरपालिका", "माई नगरपालिका"),
("सूर्योदय नगरपालिका", "सूर्योदय नगरपालिका"),
("रोङ गाउँपालिका", "रोङ गाउँपालिका"),
("फाकफोकथुम गाउँपालिका", "फाकफोकथुम गाउँपालिका"),
("मेचीनगर नगरपालिका", "मेचीनगर नगरपालिका"),
("अर्जुनधारा नगरपालिका", "अर्जुनधारा नगरपालिका"),
("कनकाई नगरपालिका", "कनकाई नगरपालिका"),
("शिवसताक्षी नगरपालिका", "शिवसताक्षी नगरपालिका"),
("कमल गाउँपालिका", "कमल गाउँपालिका"),
("दमक नगरपालिका", "दमक नगरपालिका"),
("गौरादह नगरपालिका", "गौरादह नगरपालिका"),
("बाह्रदशी गाउँपालिका", "बाह्रदशी गाउँपालिका"),
("हल्दीबारी गाउँपालिका", "हल्दीबारी गाउँपालिका"),
("भद्रपुर नगरपालिका", "भद्रपुर नगरपालिका"),
("कचनकवल गाउँपालिका", "कचनकवल गाउँपालिका"),
("बुद्धशान्ति गाउँपालिका", "बुद्धशान्ति गाउँपालिका"),
("गौरीगञ्ज गाउँपालिका", "गौरीगञ्ज गाउँपालिका"),
("झापा गाउँपालिका", "झापा गाउँपालिका"),
("बिर्तामोड नगरपालिका", "बिर्तामोड नगरपालिका"),
("मिक्लाजुङ गाउँपालिका", "मिक्लाजुङ गाउँपालिका"),
("लेटाङ नगरपालिका", "लेटाङ नगरपालिका"),
("सुन्दरहरैँचा नगरपालिका", "सुन्दरहरैँचा नगरपालिका"),
("बेलबारी नगरपालिका", "बेलबारी नगरपालिका"),
("कानेपोखरी गाउँपालिका", "कानेपोखरी गाउँपालिका"),
("पथरी शनिश्चरे नगरपालिका", "पथरी शनिश्चरे नगरपालिका"),
("उर्लाबारी नगरपालिका", "उर्लाबारी नगरपालिका"),
("रतुवामाई नगरपालिका", "रतुवामाई नगरपालिका"),
("रंगेली नगरपालिका", "रंगेली नगरपालिका"),
("ग्रामथान गाउँपालिका", "ग्रामथान गाउँपालिका"),
("बुढीगंगा गाउँपालिका", "बुढीगंगा गाउँपालिका"),
("विराटनगर महानगरपालिका", "विराटनगर महानगरपालिका"),
("धनपालथान गाउँपालिका", "धनपालथान गाउँपालिका"),
("जहदा गाउँपालिका", "जहदा गाउँपालिका"),
("केराबारी गाउँपालिका", "केराबारी गाउँपालिका"),
("सुनवर्षी नगरपालिका", "सुनवर्षी नगरपालिका"),
("कटहरी गाउँपालिका", "कटहरी गाउँपालिका"),
("धरान उप-महानगरपालिका", "धरान उप-महानगरपालिका"),
("बराहक्षेत्र नगरपालिका", "बराहक्षेत्र नगरपालिका"),
("कोशी गाउँपालिका", "कोशी गाउँपालिका"),
("रामधुनी नगरपालिका", "रामधुनी नगरपालिका"),
("इटहरी उप-महानगरपालिका", "इटहरी उप-महानगरपालिका"),
("दुहवी नगरपालिका", "दुहवी नगरपालिका"),
("गढी गाउँपालिका", "गढी गाउँपालिका"),
("इनरुवा नगरपालिका", "इनरुवा नगरपालिका"),
("हरिनगर गाउँपालिका", "हरिनगर गाउँपालिका"),
("बर्जु गाउँपालिका", "बर्जु गाउँपालिका"),
("भोक्राहा नरसिंह गाउँपालिका", "भोक्राहा नरसिंह गाउँपालिका"),
("देवानगञ्ज गाउँपालिका", "देवानगञ्ज गाउँपालिका"),
("वेलका नगरपालिका", "वेलका नगरपालिका"),
("चौदण्डीगढी नगरपालिका", "चौदण्डीगढी नगरपालिका"),
("त्रियुगा नगरपालिका", "त्रियुगा नगरपालिका"),
("रौतामाई गाउँपालिका", "रौतामाई गाउँपालिका"),
("सुनकोशी गाउँपालिका", "सुनकोशी गाउँपालिका"),
("कटारी नगरपालिका", "कटारी नगरपालिका"),
("उदयपुरग गाउँपालिका", "उदयपुरग गाउँपालिका"),
("ताप्ली गाउँपालिका", "ताप्ली गाउँपालिका"),
],
en=False,
max_length=100,
ne=True,
null=True,
),
),
migrations.AlterField(
model_name="person",
name="province",
field=django_nepkit.models.ProvinceField(
choices=[
("सुदूरपश्चिम प्रदेश", "सुदूरपश्चिम प्रदेश"),
("मधेश प्रदेश", "मधेश प्रदेश"),
("गण्डकी प्रदेश", "गण्डकी प्रदेश"),
("बागमती प्रदेश", "बागमती प्रदेश"),
("लुम्बिनी प्रदेश", "लुम्बिनी प्रदेश"),
("कर्णाली प्रदेश", "कर्णाली प्रदेश"),
("कोशी प्रदेश", "कोशी प्रदेश"),
],
en=False,
max_length=100,
ne=True,
),
),
migrations.AlterField(
model_name="person",
name="province_en",
field=django_nepkit.models.ProvinceField(
blank=True,
choices=[
("सुदूरपश्चिम प्रदेश", "सुदूरपश्चिम प्रदेश"),
("मधेश प्रदेश", "मधेश प्रदेश"),
("गण्डकी प्रदेश", "गण्डकी प्रदेश"),
("बागमती प्रदेश", "बागमती प्रदेश"),
("लुम्बिनी प्रदेश", "लुम्बिनी प्रदेश"),
("कर्णाली प्रदेश", "कर्णाली प्रदेश"),
("कोशी प्रदेश", "कोशी प्रदेश"),
],
en=False,
max_length=100,
ne=True,
null=True,
),
),
]
@@ -0,0 +1,33 @@
# Generated by Django 6.0.1 on 2026-01-30 09:16
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("demo", "0003_alter_person_birth_date_alter_person_birth_date_en_and_more"),
]
operations = [
migrations.RenameField(
model_name="person",
old_name="birth_date_en",
new_name="birth_date_ne",
),
migrations.RenameField(
model_name="person",
old_name="district_en",
new_name="district_ne",
),
migrations.RenameField(
model_name="person",
old_name="municipality_en",
new_name="municipality_ne",
),
migrations.RenameField(
model_name="person",
old_name="province_en",
new_name="province_ne",
),
]
+13 -13
View File
@@ -12,22 +12,22 @@ from django_nepkit import (
class Person(models.Model):
name = models.CharField(max_length=100)
# Date/time fields - examples with and without Devanagari
birth_date = NepaliDateField(ne=True) # Devanagari
birth_date_en = NepaliDateField(blank=True, null=True) # English (default)
registration_time = NepaliTimeField(auto_now_add=True, ne=True) # Devanagari
# Date/time fields - now default to English via NEPKIT['DEFAULT_LANGUAGE']
birth_date = NepaliDateField() # Defaults to en=True
birth_date_ne = NepaliDateField(ne=True, blank=True, null=True) # Explicitly Nepali
registration_time = NepaliTimeField(auto_now_add=True) # Defaults to en=True
phone_number = NepaliPhoneNumberField()
# Address chaining - examples with and without Devanagari
province = ProvinceField(ne=True) # Devanagari
province_en = ProvinceField(blank=True, null=True) # English (default)
district = DistrictField(ne=True) # Devanagari
district_en = DistrictField(blank=True, null=True) # English (default)
municipality = MunicipalityField(ne=True) # Devanagari
municipality_en = MunicipalityField(blank=True, null=True) # English (default)
# Address chaining - now default to English via NEPKIT['DEFAULT_LANGUAGE']
province = ProvinceField() # Defaults to en=True
province_ne = ProvinceField(ne=True, blank=True, null=True) # Explicitly Nepali
district = DistrictField() # Defaults to en=True
district_ne = DistrictField(ne=True, blank=True, null=True) # Explicitly Nepali
municipality = MunicipalityField() # Defaults to en=True
municipality_ne = MunicipalityField(ne=True, blank=True, null=True) # Explicitly Nepali
created_at = NepaliDateTimeField(auto_now_add=True, ne=True) # Devanagari
updated_at = NepaliDateTimeField(auto_now=True, ne=True) # Devanagari
created_at = NepaliDateTimeField(auto_now_add=True) # Defaults to en=True
updated_at = NepaliDateTimeField(auto_now=True) # Defaults to en=True
def __str__(self):
return self.name
+4 -4
View File
@@ -9,14 +9,14 @@ class PersonForm(forms.ModelForm):
fields = [
"name",
"birth_date",
"birth_date_en",
"birth_date_ne",
"phone_number",
"province",
"province_en",
"province_ne",
"district",
"district_en",
"district_ne",
"municipality",
"municipality_en",
"municipality_ne",
]
+8
View File
@@ -73,4 +73,12 @@ TIME_ZONE = "Asia/Kathmandu"
USE_I18N = True
USE_TZ = True
# django-nepkit settings
NEPKIT = {
"DEFAULT_LANGUAGE": "en", # Default to Devanagari for fields and widgets
"DATE_INPUT_FORMATS": ["%Y-%m-%d", "%d/%m/%Y", "%d-%m-%Y"],
"ADMIN_DATEPICKER": True,
"TIME_FORMAT": 12, # 12-hour format with AM/PM
}
STATIC_URL = "static/"
+1
View File
@@ -55,6 +55,7 @@ classifiers = [
[project.optional-dependencies]
drf = [
"djangorestframework>=3.14",
"django-filter>=23.1",
]
[project.urls]