add: add users field for warehouse model

This commit is contained in:
behruz-dev
2025-09-25 17:40:50 +05:00
parent dc079480e6
commit e8e22fe478
5 changed files with 52 additions and 11 deletions

View File

@@ -7,3 +7,4 @@ from core.apps.wherehouse.models.wherehouse import WhereHouse
class WhereHouseAdmin(admin.ModelAdmin): class WhereHouseAdmin(admin.ModelAdmin):
list_display = ['id','name', 'address',] list_display = ['id','name', 'address',]
search_fields = ['name', 'address'] search_fields = ['name', 'address']
filter_horizontal = ['users']

View File

@@ -0,0 +1,20 @@
# Generated by Django 5.2.4 on 2025-09-25 17:30
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('wherehouse', '0016_remove_wherehouse_branch'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.AddField(
model_name='wherehouse',
name='users',
field=models.ManyToManyField(blank=True, related_name='warehouses', to=settings.AUTH_USER_MODEL),
),
]

View File

@@ -2,12 +2,12 @@ from django.db import models
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from core.apps.shared.models import BaseModel from core.apps.shared.models import BaseModel
from core.apps.company.models.branch import Branch from core.apps.accounts.models import User
class WhereHouse(BaseModel): class WhereHouse(BaseModel):
name = models.CharField(max_length=200) name = models.CharField(max_length=200)
address = models.CharField(max_length=200) address = models.CharField(max_length=200)
users = models.ManyToManyField(User, related_name='warehouses', blank=True)
def __str__(self): def __str__(self):
return self.name return self.name

View File

@@ -3,16 +3,17 @@ from django.db import transaction
from rest_framework import serializers from rest_framework import serializers
from core.apps.wherehouse.models.wherehouse import WhereHouse from core.apps.wherehouse.models.wherehouse import WhereHouse
from core.apps.wherehouse.serializers.inventory import InventoryListSerializer from core.apps.accounts.models import User
from core.apps.company.serializers.branch import BranchListSerializer from core.apps.accounts.serializers.user import UserListSerializer
from core.apps.company.models import Branch
class WhereHouseListSerializer(serializers.ModelSerializer): class WhereHouseListSerializer(serializers.ModelSerializer):
users = UserListSerializer(many=True)
class Meta: class Meta:
model = WhereHouse model = WhereHouse
fields = [ fields = [
'id', 'name', 'address', 'id', 'name', 'address', 'users'
] ]
@@ -27,24 +28,34 @@ class WhereHouseDetailSerializer(serializers.ModelSerializer):
class WhereHouseCreateSerializer(serializers.Serializer): class WhereHouseCreateSerializer(serializers.Serializer):
name = serializers.CharField() name = serializers.CharField()
address = serializers.CharField() address = serializers.CharField()
user_ids = serializers.ListField(child=serializers.UUIDField(required=False), required=False)
def create(self, validated_data): def create(self, validated_data):
with transaction.atomic(): with transaction.atomic():
return WhereHouse.objects.create( user_ids = validated_data.pop('user_ids', [])
wherehouse = WhereHouse.objects.create(
name=validated_data.get('name'), name=validated_data.get('name'),
address=validated_data.get('address'), address=validated_data.get('address'),
) )
if user_ids:
users = User.objects.filter(id__in=user_ids)
wherehouse.users.set(users)
return wherehouse
class WhereHouseUpdateSerializer(serializers.ModelSerializer): class WhereHouseUpdateSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = WhereHouse model = WhereHouse
fields = [ fields = [
'name', 'address', 'name', 'address', 'users'
] ]
def update(self, instance, validated_data): def update(self, instance, validated_data):
instance.name = validated_data.get('name', instance.name) instance.name = validated_data.get('name', instance.name)
instance.address = validated_data.get('address', instance.address) instance.address = validated_data.get('address', instance.address)
users = validated_data.pop('users', None)
if users is not None:
instance.users.set(users)
instance.save() instance.save()
return instance return instance

View File

@@ -8,11 +8,20 @@ from core.apps.wherehouse.serializers import wherehouse as serializers
from core.apps.accounts.permissions.permissions import HasRolePermission from core.apps.accounts.permissions.permissions import HasRolePermission
class WhereHouseListApiView(generics.ListAPIView): class WhereHouseListApiView(generics.GenericAPIView):
serializer_class = serializers.WhereHouseListSerializer serializer_class = serializers.WhereHouseListSerializer
queryset = WhereHouse.objects.all() queryset = WhereHouse.objects.prefetch_related('users')
permission_classes = [HasRolePermission] permission_classes = [HasRolePermission]
def get(self, request):
mine = request.query_params.get('mine')
if mine and mine == 'true':
self.queryset = self.queryset.filter(users=request.user)
page = self.paginate_queryset(self.queryset)
if page is not None:
serializer = self.serializer_class(page, many=True)
return self.get_paginated_response(serializer.data)
class WhereHouseDetailApiView(generics.RetrieveAPIView): class WhereHouseDetailApiView(generics.RetrieveAPIView):
serializer_class = serializers.WhereHouseDetailSerializer serializer_class = serializers.WhereHouseDetailSerializer