add: add users field for warehouse model
This commit is contained in:
@@ -7,3 +7,4 @@ from core.apps.wherehouse.models.wherehouse import WhereHouse
|
||||
class WhereHouseAdmin(admin.ModelAdmin):
|
||||
list_display = ['id','name', 'address',]
|
||||
search_fields = ['name', 'address']
|
||||
filter_horizontal = ['users']
|
||||
20
core/apps/wherehouse/migrations/0017_wherehouse_users.py
Normal file
20
core/apps/wherehouse/migrations/0017_wherehouse_users.py
Normal 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),
|
||||
),
|
||||
]
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user