add project location

This commit is contained in:
behruz-dev
2025-08-07 12:40:16 +05:00
parent 2162fc2cdc
commit ec69b6f80b
17 changed files with 357 additions and 20 deletions

View File

@@ -0,0 +1 @@
from .region import *

View File

@@ -0,0 +1,23 @@
from django.contrib import admin
from core.apps.shared.models import Region, District
class DistrictInline(admin.TabularInline):
model = District
extra = 0
show_change_link = True
show_full_result_count = True
@admin.register(Region)
class ReginAdmin(admin.ModelAdmin):
list_display = ['name']
search_fields = ['name']
inlines = [DistrictInline]
@admin.register(District)
class DistrictAdmin(admin.ModelAdmin):
list_display = ['name']
search_fields = ['name']

View File

@@ -4,3 +4,7 @@ from django.apps import AppConfig
class SharedConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'core.apps.shared'
def ready(self):
from . import admin

View File

@@ -0,0 +1,43 @@
# Generated by Django 5.2.4 on 2025-08-07 11:39
import django.db.models.deletion
import uuid
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Region',
fields=[
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=True)),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('name', models.CharField(max_length=200)),
],
options={
'verbose_name': 'Mintaqa',
'verbose_name_plural': 'Mintaqalar',
},
),
migrations.CreateModel(
name='District',
fields=[
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=True)),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('name', models.CharField(max_length=200)),
('region', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='districts', to='shared.region')),
],
options={
'verbose_name': 'Tuman',
'verbose_name_plural': 'Tumanlar',
},
),
]

View File

@@ -1 +1,2 @@
from .base import BaseModel
from .base import BaseModel
from .region import *

View File

@@ -0,0 +1,27 @@
from django.db import models
from django.utils.translation import gettext_lazy as _
from core.apps.shared.models import BaseModel
class Region(BaseModel):
name = models.CharField(max_length=200)
def __str__(self):
return self.name
class Meta:
verbose_name = _("Mintaqa")
verbose_name_plural = _("Mintaqalar")
class District(BaseModel):
name = models.CharField(max_length=200)
region = models.ForeignKey(Region, on_delete=models.CASCADE, related_name='districts')
def __str__(self):
return self.name
class Meta:
verbose_name = _("Tuman")
verbose_name_plural = _("Tumanlar")

View File

@@ -0,0 +1,19 @@
from rest_framework import serializers
from core.apps.shared.models import Region, District
class DistrictListSerializer(serializers.ModelSerializer):
class Meta:
model = District
fields = ['id', 'name']
class RegionListSerializer(serializers.ModelSerializer):
districts = DistrictListSerializer(many=True)
class Meta:
model = Region
fields = [
'id', 'name', 'districts'
]

View File

@@ -1,5 +1,7 @@
from django.urls import path, include
from core.apps.shared.views import region as region_views
urlpatterns = [
path('region/list/', region_views.RegionListApiView.as_view()),
]

View File

@@ -0,0 +1,13 @@
from rest_framework import generics
from core.apps.shared.serializers.region import RegionListSerializer
from core.apps.shared.models import Region
from core.apps.accounts.permissions.permissions import HasRolePermission
class RegionListApiView(generics.ListAPIView):
permission_classes = [HasRolePermission]
queryset = Region.objects.prefetch_related('districts')
serializer_class = RegionListSerializer
required_permissions = ['project', 'project_folder']