changes on entering cities
This commit is contained in:
parent
f213aed6e7
commit
bae3510e83
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -3,20 +3,20 @@ from .models import Profile, Parcel, Country, Governate, City
|
|||||||
|
|
||||||
@admin.register(Country)
|
@admin.register(Country)
|
||||||
class CountryAdmin(admin.ModelAdmin):
|
class CountryAdmin(admin.ModelAdmin):
|
||||||
list_display = ('name',)
|
list_display = ('name_en', 'name_ar')
|
||||||
search_fields = ('name',)
|
search_fields = ('name_en', 'name_ar')
|
||||||
|
|
||||||
@admin.register(Governate)
|
@admin.register(Governate)
|
||||||
class GovernateAdmin(admin.ModelAdmin):
|
class GovernateAdmin(admin.ModelAdmin):
|
||||||
list_display = ('name', 'country')
|
list_display = ('name_en', 'name_ar', 'country')
|
||||||
list_filter = ('country',)
|
list_filter = ('country',)
|
||||||
search_fields = ('name',)
|
search_fields = ('name_en', 'name_ar')
|
||||||
|
|
||||||
@admin.register(City)
|
@admin.register(City)
|
||||||
class CityAdmin(admin.ModelAdmin):
|
class CityAdmin(admin.ModelAdmin):
|
||||||
list_display = ('name', 'governate')
|
list_display = ('name_en', 'name_ar', 'governate')
|
||||||
list_filter = ('governate__country', 'governate')
|
list_filter = ('governate__country', 'governate')
|
||||||
search_fields = ('name',)
|
search_fields = ('name_en', 'name_ar')
|
||||||
|
|
||||||
@admin.register(Profile)
|
@admin.register(Profile)
|
||||||
class ProfileAdmin(admin.ModelAdmin):
|
class ProfileAdmin(admin.ModelAdmin):
|
||||||
@ -26,7 +26,7 @@ class ProfileAdmin(admin.ModelAdmin):
|
|||||||
|
|
||||||
@admin.register(Parcel)
|
@admin.register(Parcel)
|
||||||
class ParcelAdmin(admin.ModelAdmin):
|
class ParcelAdmin(admin.ModelAdmin):
|
||||||
list_display = ('tracking_number', 'shipper', 'carrier', 'status', 'created_at')
|
list_display = ('tracking_number', 'shipper', 'carrier', 'status', 'payment_status', 'created_at')
|
||||||
list_filter = ('status', 'pickup_country', 'delivery_country')
|
list_filter = ('status', 'payment_status', 'pickup_country', 'delivery_country')
|
||||||
search_fields = ('tracking_number', 'shipper__username', 'carrier__username', 'receiver_name')
|
search_fields = ('tracking_number', 'shipper__username', 'carrier__username', 'receiver_name')
|
||||||
readonly_fields = ('tracking_number', 'created_at', 'updated_at')
|
readonly_fields = ('tracking_number', 'created_at', 'updated_at')
|
||||||
@ -1,6 +1,7 @@
|
|||||||
from django import forms
|
from django import forms
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
from django.utils.translation import get_language
|
||||||
from .models import Profile, Parcel, Country, Governate, City
|
from .models import Profile, Parcel, Country, Governate, City
|
||||||
|
|
||||||
class UserRegistrationForm(forms.ModelForm):
|
class UserRegistrationForm(forms.ModelForm):
|
||||||
@ -25,23 +26,28 @@ class UserRegistrationForm(forms.ModelForm):
|
|||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
|
lang = get_language()
|
||||||
|
name_field = 'name_ar' if lang == 'ar' else 'name_en'
|
||||||
|
|
||||||
|
self.fields['country'].queryset = Country.objects.all().order_by(name_field)
|
||||||
|
|
||||||
if 'country' in self.data:
|
if 'country' in self.data:
|
||||||
try:
|
try:
|
||||||
country_id = int(self.data.get('country'))
|
country_id = int(self.data.get('country'))
|
||||||
self.fields['governate'].queryset = Governate.objects.filter(country_id=country_id).order_by('name')
|
self.fields['governate'].queryset = Governate.objects.filter(country_id=country_id).order_by(name_field)
|
||||||
except (ValueError, TypeError):
|
except (ValueError, TypeError):
|
||||||
pass
|
pass
|
||||||
elif self.instance.pk and hasattr(self.instance, 'profile') and self.instance.profile.country:
|
elif self.instance.pk and hasattr(self.instance, 'profile') and self.instance.profile.country:
|
||||||
self.fields['governate'].queryset = self.instance.profile.country.governate_set.order_by('name')
|
self.fields['governate'].queryset = self.instance.profile.country.governate_set.order_by(name_field)
|
||||||
|
|
||||||
if 'governate' in self.data:
|
if 'governate' in self.data:
|
||||||
try:
|
try:
|
||||||
governate_id = int(self.data.get('governate'))
|
governate_id = int(self.data.get('governate'))
|
||||||
self.fields['city'].queryset = City.objects.filter(governate_id=governate_id).order_by('name')
|
self.fields['city'].queryset = City.objects.filter(governate_id=governate_id).order_by(name_field)
|
||||||
except (ValueError, TypeError):
|
except (ValueError, TypeError):
|
||||||
pass
|
pass
|
||||||
elif self.instance.pk and hasattr(self.instance, 'profile') and self.instance.profile.governate:
|
elif self.instance.pk and hasattr(self.instance, 'profile') and self.instance.profile.governate:
|
||||||
self.fields['city'].queryset = self.instance.profile.governate.city_set.order_by('name')
|
self.fields['city'].queryset = self.instance.profile.governate.city_set.order_by(name_field)
|
||||||
|
|
||||||
def clean_password_confirm(self):
|
def clean_password_confirm(self):
|
||||||
password = self.cleaned_data.get('password')
|
password = self.cleaned_data.get('password')
|
||||||
@ -110,6 +116,13 @@ class ParcelForm(forms.ModelForm):
|
|||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
|
lang = get_language()
|
||||||
|
name_field = 'name_ar' if lang == 'ar' else 'name_en'
|
||||||
|
|
||||||
|
# Set querysets for countries
|
||||||
|
self.fields['pickup_country'].queryset = Country.objects.all().order_by(name_field)
|
||||||
|
self.fields['delivery_country'].queryset = Country.objects.all().order_by(name_field)
|
||||||
|
|
||||||
# Pickup
|
# Pickup
|
||||||
self.fields['pickup_governate'].queryset = Governate.objects.none()
|
self.fields['pickup_governate'].queryset = Governate.objects.none()
|
||||||
self.fields['pickup_city'].queryset = City.objects.none()
|
self.fields['pickup_city'].queryset = City.objects.none()
|
||||||
@ -117,14 +130,14 @@ class ParcelForm(forms.ModelForm):
|
|||||||
if 'pickup_country' in self.data:
|
if 'pickup_country' in self.data:
|
||||||
try:
|
try:
|
||||||
country_id = int(self.data.get('pickup_country'))
|
country_id = int(self.data.get('pickup_country'))
|
||||||
self.fields['pickup_governate'].queryset = Governate.objects.filter(country_id=country_id).order_by('name')
|
self.fields['pickup_governate'].queryset = Governate.objects.filter(country_id=country_id).order_by(name_field)
|
||||||
except (ValueError, TypeError):
|
except (ValueError, TypeError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
if 'pickup_governate' in self.data:
|
if 'pickup_governate' in self.data:
|
||||||
try:
|
try:
|
||||||
gov_id = int(self.data.get('pickup_governate'))
|
gov_id = int(self.data.get('pickup_governate'))
|
||||||
self.fields['pickup_city'].queryset = City.objects.filter(governate_id=gov_id).order_by('name')
|
self.fields['pickup_city'].queryset = City.objects.filter(governate_id=gov_id).order_by(name_field)
|
||||||
except (ValueError, TypeError):
|
except (ValueError, TypeError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@ -135,13 +148,13 @@ class ParcelForm(forms.ModelForm):
|
|||||||
if 'delivery_country' in self.data:
|
if 'delivery_country' in self.data:
|
||||||
try:
|
try:
|
||||||
country_id = int(self.data.get('delivery_country'))
|
country_id = int(self.data.get('delivery_country'))
|
||||||
self.fields['delivery_governate'].queryset = Governate.objects.filter(country_id=country_id).order_by('name')
|
self.fields['delivery_governate'].queryset = Governate.objects.filter(country_id=country_id).order_by(name_field)
|
||||||
except (ValueError, TypeError):
|
except (ValueError, TypeError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
if 'delivery_governate' in self.data:
|
if 'delivery_governate' in self.data:
|
||||||
try:
|
try:
|
||||||
gov_id = int(self.data.get('delivery_governate'))
|
gov_id = int(self.data.get('delivery_governate'))
|
||||||
self.fields['delivery_city'].queryset = City.objects.filter(governate_id=gov_id).order_by('name')
|
self.fields['delivery_city'].queryset = City.objects.filter(governate_id=gov_id).order_by(name_field)
|
||||||
except (ValueError, TypeError):
|
except (ValueError, TypeError):
|
||||||
pass
|
pass
|
||||||
@ -0,0 +1,55 @@
|
|||||||
|
# Generated by Django 5.2.7 on 2026-01-25 10:14
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('core', '0004_parcel_payment_status_parcel_price_and_more'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='city',
|
||||||
|
name='name',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='country',
|
||||||
|
name='name',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='governate',
|
||||||
|
name='name',
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='city',
|
||||||
|
name='name_ar',
|
||||||
|
field=models.CharField(default='', max_length=100, verbose_name='Name (Arabic)'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='city',
|
||||||
|
name='name_en',
|
||||||
|
field=models.CharField(default='', max_length=100, verbose_name='Name (English)'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='country',
|
||||||
|
name='name_ar',
|
||||||
|
field=models.CharField(default='', max_length=100, verbose_name='Name (Arabic)'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='country',
|
||||||
|
name='name_en',
|
||||||
|
field=models.CharField(default='', max_length=100, verbose_name='Name (English)'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='governate',
|
||||||
|
name='name_ar',
|
||||||
|
field=models.CharField(default='', max_length=100, verbose_name='Name (Arabic)'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='governate',
|
||||||
|
name='name_en',
|
||||||
|
field=models.CharField(default='', max_length=100, verbose_name='Name (English)'),
|
||||||
|
),
|
||||||
|
]
|
||||||
@ -0,0 +1,43 @@
|
|||||||
|
# Generated by Django 5.2.7 on 2026-01-25 10:15
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('core', '0005_remove_city_name_remove_country_name_and_more'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='city',
|
||||||
|
name='name_ar',
|
||||||
|
field=models.CharField(max_length=100, verbose_name='Name (Arabic)'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='city',
|
||||||
|
name='name_en',
|
||||||
|
field=models.CharField(max_length=100, verbose_name='Name (English)'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='country',
|
||||||
|
name='name_ar',
|
||||||
|
field=models.CharField(max_length=100, verbose_name='Name (Arabic)'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='country',
|
||||||
|
name='name_en',
|
||||||
|
field=models.CharField(max_length=100, verbose_name='Name (English)'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='governate',
|
||||||
|
name='name_ar',
|
||||||
|
field=models.CharField(max_length=100, verbose_name='Name (Arabic)'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='governate',
|
||||||
|
name='name_en',
|
||||||
|
field=models.CharField(max_length=100, verbose_name='Name (English)'),
|
||||||
|
),
|
||||||
|
]
|
||||||
Binary file not shown.
Binary file not shown.
@ -1,12 +1,20 @@
|
|||||||
from django.db import models
|
from django.db import models
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
from django.utils.translation import get_language
|
||||||
from django.db.models.signals import post_save
|
from django.db.models.signals import post_save
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
class Country(models.Model):
|
class Country(models.Model):
|
||||||
name = models.CharField(_('Name'), max_length=100)
|
name_en = models.CharField(_('Name (English)'), max_length=100)
|
||||||
|
name_ar = models.CharField(_('Name (Arabic)'), max_length=100)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def name(self):
|
||||||
|
if get_language() == 'ar':
|
||||||
|
return self.name_ar
|
||||||
|
return self.name_en
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
@ -17,7 +25,14 @@ class Country(models.Model):
|
|||||||
|
|
||||||
class Governate(models.Model):
|
class Governate(models.Model):
|
||||||
country = models.ForeignKey(Country, on_delete=models.CASCADE, verbose_name=_('Country'))
|
country = models.ForeignKey(Country, on_delete=models.CASCADE, verbose_name=_('Country'))
|
||||||
name = models.CharField(_('Name'), max_length=100)
|
name_en = models.CharField(_('Name (English)'), max_length=100)
|
||||||
|
name_ar = models.CharField(_('Name (Arabic)'), max_length=100)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def name(self):
|
||||||
|
if get_language() == 'ar':
|
||||||
|
return self.name_ar
|
||||||
|
return self.name_en
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f"{self.name} ({self.country.name})"
|
return f"{self.name} ({self.country.name})"
|
||||||
@ -28,7 +43,14 @@ class Governate(models.Model):
|
|||||||
|
|
||||||
class City(models.Model):
|
class City(models.Model):
|
||||||
governate = models.ForeignKey(Governate, on_delete=models.CASCADE, verbose_name=_('Governate'))
|
governate = models.ForeignKey(Governate, on_delete=models.CASCADE, verbose_name=_('Governate'))
|
||||||
name = models.CharField(_('Name'), max_length=100)
|
name_en = models.CharField(_('Name (English)'), max_length=100)
|
||||||
|
name_ar = models.CharField(_('Name (Arabic)'), max_length=100)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def name(self):
|
||||||
|
if get_language() == 'ar':
|
||||||
|
return self.name_ar
|
||||||
|
return self.name_en
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f"{self.name} ({self.governate.name})"
|
return f"{self.name} ({self.governate.name})"
|
||||||
|
|||||||
@ -5,6 +5,7 @@ from django.contrib.auth.decorators import login_required
|
|||||||
from .models import Parcel, Profile, Country, Governate, City
|
from .models import Parcel, Profile, Country, Governate, City
|
||||||
from .forms import UserRegistrationForm, ParcelForm
|
from .forms import UserRegistrationForm, ParcelForm
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
from django.utils.translation import get_language
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.http import JsonResponse
|
from django.http import JsonResponse
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
@ -168,10 +169,16 @@ def article_detail(request):
|
|||||||
|
|
||||||
def get_governates(request):
|
def get_governates(request):
|
||||||
country_id = request.GET.get('country_id')
|
country_id = request.GET.get('country_id')
|
||||||
governates = Governate.objects.filter(country_id=country_id).values('id', 'name')
|
lang = get_language()
|
||||||
return JsonResponse(list(governates), safe=False)
|
field_name = 'name_ar' if lang == 'ar' else 'name_en'
|
||||||
|
governates = Governate.objects.filter(country_id=country_id).order_by(field_name)
|
||||||
|
data = [{'id': g.id, 'name': getattr(g, field_name)} for g in governates]
|
||||||
|
return JsonResponse(data, safe=False)
|
||||||
|
|
||||||
def get_cities(request):
|
def get_cities(request):
|
||||||
governate_id = request.GET.get('governate_id')
|
governate_id = request.GET.get('governate_id')
|
||||||
cities = City.objects.filter(governate_id=governate_id).values('id', 'name')
|
lang = get_language()
|
||||||
return JsonResponse(list(cities), safe=False)
|
field_name = 'name_ar' if lang == 'ar' else 'name_en'
|
||||||
|
cities = City.objects.filter(governate_id=governate_id).order_by(field_name)
|
||||||
|
data = [{'id': c.id, 'name': getattr(c, field_name)} for c in cities]
|
||||||
|
return JsonResponse(data, safe=False)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user