A simple Django app to provide Indonesia region
Project description
Wilayah Indonesia
Aplikasi ini menyediakan data wilayah administratif Indonesia (provinsi, kabupaten/kota, kecamatan, dan desa) yang dapat digunakan untuk kebutuhan input pada Admin site, form custom, REST API.
Fitur
- Menyediakan data wilayah Indonesia secara lengkap
- Mendukung proses seeding ke database
- Tersedia form chained untuk diimplementasikan pada form Admin site atau form custom
- Tersedia endpoint REST API
Instalasi
Via PIP
pip install django-wilayah-indonesia
Manual
-
Clone repository
- Unduh zip dan extrak dalam direktori proyek
- Atau masuk dalam direktori proyek kamu lalu clone repositori ini
git clone https://github.com/irfanpule/data-wilayah-indonesia.
-
Install dependencies
pip install django-select2
Setelah berhasil lakukan
-
Registrasi App
INSTALLED_APPS = [ .... 'wilayah_indonesia' .... ] -
Migrate
./manage.py migrate -
Register URL Registrasikan url django-select2 dan wilayah_indonesia
path('wilayah-indonesia/', include('wilayah_indonesia.urls')), path('select2/', include('django_select2.urls'))
⚠️ PENTING: Upgrade ke Versi Baru
Jika Anda melakukan upgrade dari versi lama dan data wilayah sudah ada di database, harap ikuti panduan migrasi untuk menghindari kehilangan data!
Panduan Lengkap: Lihat MIGRASI_QUICKSTART.md atau MIGRASI_DATA.md
Quick Guide Migrasi:
Jika model Anda menggunakan on_delete=SET_NULL:
# 1. Import data baru TANPA --clear (data lama tetap ada)
python manage.py import_base_csv
# 2. Migrasi relasi (matching dari CSV lama ke database baru)
python manage.py migrate_wilayah_relations --auto-discover
# 3. Cleanup data lama (opsional)
python manage.py cleanup_old_wilayah
Catatan: Pastikan file CSV lama (provinces.csv, regencies.csv, districts.csv, villages.csv) tersedia di wilayah_indonesia/csv/ untuk proses migrasi.
Seeding Data Wilayah
Import dari File Tunggal (base.csv)
Alternatif, Anda dapat menggunakan command import_base_csv untuk import data dari satu file CSV dengan format: ID,Nama
# Import data baru
python manage.py import_base_csv
# Atau import dengan menghapus data lama (hati-hati jika ada on_delete=SET_NULL)
python manage.py import_base_csv --clear
Format CSV:
11,ACEH
1101,KAB. ACEH SELATAN
110101,Bakongan
1101012001,Keude Bakongan
Kategori berdasarkan panjang ID:
- 2 digit → Provinsi
- 4 digit → Kabupaten
- 6 digit → Kecamatan
- 10+ digit → Desa
Model
Contoh kode:
from wilayah_indonesia.models import WilayahDisplayMixin
class Profile(WilayahDisplayMixin, models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
nik = models.CharField(max_length=16, unique=True)
# field lainnya....
provinsi = models.ForeignKey("wilayah_indonesia.Provinsi", on_delete=models.SET_NULL, null=True, blank=True)
kabupaten = models.ForeignKey("wilayah_indonesia.Kabupaten", on_delete=models.SET_NULL, null=True, blank=True)
kecamatan = models.ForeignKey("wilayah_indonesia.Kecamatan", on_delete=models.SET_NULL, null=True, blank=True)
desa = models.ForeignKey("wilayah_indonesia.Desa", on_delete=models.SET_NULL, null=True, blank=True)
# field lainnya ....
def __str__(self):
return self.nik
Disediakan class mixin untuk mempermudah akses nama dari masing-masing wilayah. Cukup gunakan WilayahDisplayMixin kamu dapat dengan mudah akses nama wilayah seperti ini: get_provinsi_display(), get_kabupaten_display(), get_kecamatan_display, get_desa_display().
NB: Disarakan nama field tetap menggunakan provinsi, kabupaten, kecamatan, desa agar fungsi mixin bekerja
Form
Sudah tersedia tersedia class mixin untuk form select2 chained dapat dilihat pada wilayah_indonesia/forms.py
- Gunakan fungsi chiined yang sudah disediakan untuk membuat select chained pada form. Contoh
# Form -------
# Implementasi fungsi chained pada form
from wilayah_indonesia.forms import WilayahChainedFormMixin
class ProfileAdminForm(WilayahChainedFormMixin, forms.ModelForm):
class Meta:
model = Profile
fields = '__all__'
# Admin site -------
# Implementasi form pada admin site
@admin.register(Profile)
class ProfileAdmin(admin.ModelAdmin):
list_display = ('user', 'nik', 'no_ponsel', 'jenis_kelamin')
# atribute lainnya ....
form = ProfileAdminForm # tambahkan form disini
Endpoint
- Untuk mendapatkan data provinsi
{{base_url}}/wilayah-indonesia/provinsi/
- Untuk mendapatkan data kabupaten harus menambahkan id provinsi pada url
{{base_url}}/wilayah-indonesia/kabupaten/18/
- Untuk mendapatkan data kecamatan harus menambahkan id kabupaten pada url
{{base_url}}/wilayah-indonesia/kecamatan/1809/
- Untuk mendapatkan data desa harus menambahkan id kecamatan pada url
{{base_url}}/wilayah-indonesia/desa/1809050/
- Untuk melakukan filter atau search data cukup menambahkan query param pada url
{{uri}}/?search=way. Berlaku untuk semua endpoint
Lisensi
MIT License.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file django_wilayah_indonesia-0.2.0.tar.gz.
File metadata
- Download URL: django_wilayah_indonesia-0.2.0.tar.gz
- Upload date:
- Size: 1.8 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
224197ad487415a823039a14778b34d7c2a27ffe37078e6cb826d9ef8cbbc829
|
|
| MD5 |
2ec6ff0978b71104faf3303db30f29cd
|
|
| BLAKE2b-256 |
afd8cccffd7f86eb2b2fd31144ce5de410d74657cf3a8aaf456175445d9178a3
|
File details
Details for the file django_wilayah_indonesia-0.2.0-py3-none-any.whl.
File metadata
- Download URL: django_wilayah_indonesia-0.2.0-py3-none-any.whl
- Upload date:
- Size: 1.9 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f6caab8d15b73d23f42c02a31e79140a3c3be02a9dc3c5f3da23eeae1475ec89
|
|
| MD5 |
ed15d68ea7de26f576b2543dd533fb11
|
|
| BLAKE2b-256 |
afaa265e54ef063e89101c7dec884cbc05a93b698274ffd701370e4ed98acc28
|