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

@@ -6,4 +6,5 @@ from core.apps.wherehouse.models.wherehouse import WhereHouse
@admin.register(WhereHouse)
class WhereHouseAdmin(admin.ModelAdmin):
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 core.apps.shared.models import BaseModel
from core.apps.company.models.branch import Branch
from core.apps.accounts.models import User
class WhereHouse(BaseModel):
name = models.CharField(max_length=200)
address = models.CharField(max_length=200)
users = models.ManyToManyField(User, related_name='warehouses', blank=True)
def __str__(self):
return self.name

View File

@@ -3,16 +3,17 @@ from django.db import transaction
from rest_framework import serializers
from core.apps.wherehouse.models.wherehouse import WhereHouse
from core.apps.wherehouse.serializers.inventory import InventoryListSerializer
from core.apps.company.serializers.branch import BranchListSerializer
from core.apps.company.models import Branch
from core.apps.accounts.models import User
from core.apps.accounts.serializers.user import UserListSerializer
class WhereHouseListSerializer(serializers.ModelSerializer):
users = UserListSerializer(many=True)
class Meta:
model = WhereHouse
fields = [
'id', 'name', 'address',
'id', 'name', 'address', 'users'
]
@@ -27,24 +28,34 @@ class WhereHouseDetailSerializer(serializers.ModelSerializer):
class WhereHouseCreateSerializer(serializers.Serializer):
name = serializers.CharField()
address = serializers.CharField()
user_ids = serializers.ListField(child=serializers.UUIDField(required=False), required=False)
def create(self, validated_data):
with transaction.atomic():
return WhereHouse.objects.create(
user_ids = validated_data.pop('user_ids', [])
wherehouse = WhereHouse.objects.create(
name=validated_data.get('name'),
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 Meta:
model = WhereHouse
fields = [
'name', 'address',
'name', 'address', 'users'
]
def update(self, instance, validated_data):
instance.name = validated_data.get('name', instance.name)
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()
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
class WhereHouseListApiView(generics.ListAPIView):
class WhereHouseListApiView(generics.GenericAPIView):
serializer_class = serializers.WhereHouseListSerializer
queryset = WhereHouse.objects.all()
queryset = WhereHouse.objects.prefetch_related('users')
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):
serializer_class = serializers.WhereHouseDetailSerializer