flower_mr 1 miesiąc temu
rodzic
commit
e7f6b81cf8

BIN
container/__pycache__/views.cpython-38.pyc


BIN
db.sqlite3


BIN
erp/__pycache__/__init__.cpython-38.pyc


BIN
erp/__pycache__/admin.cpython-38.pyc


BIN
erp/__pycache__/apps.cpython-38.pyc


BIN
erp/__pycache__/filter.cpython-38.pyc


BIN
erp/__pycache__/models.cpython-38.pyc


BIN
erp/__pycache__/serializers.cpython-38.pyc


BIN
erp/__pycache__/urls.cpython-38.pyc


BIN
erp/__pycache__/views.cpython-38.pyc


+ 43 - 0
erp/filter.py

@@ -0,0 +1,43 @@
+from django_filters import FilterSet
+from .models import InboundBill, MaterialDetail
+
+class InboundBillFilter(FilterSet):
+    class Meta:
+        model = InboundBill
+        fields = {
+           
+            "billId": ['exact', 'gt', 'gte', 'lt', 'lte', 'isnull', 'in', 'range'],
+            "number": ['exact', 'icontains'],
+            "type": ['exact', 'gt', 'gte', 'lt', 'lte', 'isnull', 'in', 'range'],
+            "date": ['exact', 'gt', 'gte', 'lt', 'lte', 'isnull', 'in', 'range'],
+            "department": ['exact', 'icontains'],
+            "warehouse": ['exact', 'icontains'],
+            "creater": ['exact', 'icontains'],
+            "note": ['exact', 'icontains'],
+            "totalCount": ['exact', 'gt', 'gte', 'lt', 'lte', 'isnull', 'in', 'range'],
+            "create_time": ['exact', 'gt', 'gte', 'lt', 'lte', 'range'],
+            "update_time": ['exact', 'gt', 'gte', 'lt', 'lte', 'range'],
+            "is_delete": ['exact'],
+        }
+
+class MaterialDetailFilter(FilterSet):
+    class Meta:
+        model = MaterialDetail
+        fields = {
+            "id": ['exact', 'gt', 'gte', 'lt', 'lte', 'isnull', 'in', 'range'],
+            "bound_billId": ['exact'],
+            "entryIds": ['exact', 'gt', 'gte', 'lt', 'lte', 'isnull', 'in', 'range'],
+            "production_batch": ['exact', 'icontains'],
+            "goods_code": ['exact', 'icontains'],
+            "goods_name": ['exact', 'icontains'],
+            "goods_std": ['exact', 'icontains'],
+            "goods_weight": ['exact', 'icontains'],
+            "plan_qty": ['exact', 'gt', 'gte', 'lt', 'lte', 'isnull', 'in', 'range'],
+            "goods_total_weight": ['exact', 'gt', 'gte', 'lt', 'lte', 'isnull', 'in', 'range'],
+            "goods_unit": ['exact', 'icontains'],
+            "note": ['exact', 'icontains'],
+            "create_time": ['exact', 'gt', 'gte', 'lt', 'lte', 'range'],
+            "update_time": ['exact', 'gt', 'gte', 'lt', 'lte', 'range'],
+            "is_delete": ['exact'],
+        }
+

+ 61 - 0
erp/migrations/0001_initial.py

@@ -0,0 +1,61 @@
+# Generated by Django 4.1.2 on 2025-04-29 14:34
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='InboundBill',
+            fields=[
+                ('billId', models.IntegerField(primary_key=True, serialize=False, verbose_name='原始单据ID')),
+                ('number', models.CharField(max_length=50, unique=True, verbose_name='单据编号')),
+                ('type', models.IntegerField(choices=[(1, '订单'), (2, '其他')], verbose_name='绑定类型')),
+                ('date', models.CharField(max_length=10, verbose_name='入库时间')),
+                ('department', models.CharField(max_length=10, null=True, verbose_name='部门')),
+                ('warehouse', models.CharField(default='W01', max_length=10, verbose_name='仓库')),
+                ('creater', models.CharField(max_length=50, null=True, verbose_name='创建人')),
+                ('note', models.TextField(blank=True, null=True, verbose_name='备注说明')),
+                ('totalCount', models.IntegerField(verbose_name='总条目数')),
+                ('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
+                ('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
+                ('is_delete', models.BooleanField(default=False, verbose_name='是否删除')),
+            ],
+            options={
+                'verbose_name': '生产入库单',
+                'verbose_name_plural': '生产入库单',
+            },
+        ),
+        migrations.CreateModel(
+            name='MaterialDetail',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('entryIds', models.IntegerField(verbose_name='分录ID')),
+                ('production_batch', models.CharField(max_length=50, verbose_name='生产批次')),
+                ('goods_code', models.CharField(max_length=20, verbose_name='商品编码')),
+                ('goods_name', models.CharField(max_length=100, verbose_name='商品名称')),
+                ('goods_std', models.CharField(max_length=50, verbose_name='商品规格')),
+                ('goods_weight', models.DecimalField(decimal_places=2, default=1, max_digits=10, verbose_name='单件重量')),
+                ('plan_qty', models.IntegerField(verbose_name='计划数量')),
+                ('goods_total_weight', models.DecimalField(decimal_places=2, max_digits=10, null=True, verbose_name='总重量')),
+                ('goods_unit', models.CharField(max_length=20, verbose_name='计量单位')),
+                ('note', models.TextField(blank=True, verbose_name='备注')),
+                ('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
+                ('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
+                ('is_delete', models.BooleanField(default=False, verbose_name='是否删除')),
+                ('bound_billId', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='bill_id', to='erp.inboundbill', verbose_name='所属入库单')),
+            ],
+            options={
+                'verbose_name': '物料明细',
+                'verbose_name_plural': '物料明细',
+                'unique_together': {('bound_billId', 'entryIds')},
+            },
+        ),
+    ]

BIN
erp/migrations/__pycache__/0001_initial.cpython-38.pyc


BIN
erp/migrations/__pycache__/0002_rename_total_count_inboundbill_totalcount_and_more.cpython-38.pyc


BIN
erp/migrations/__pycache__/__init__.cpython-38.pyc


+ 49 - 1
erp/models.py

@@ -1,3 +1,51 @@
 from django.db import models
 
-# Create your models here.
+class InboundBill(models.Model):
+    BOUND_TYPE = (
+        (1, '订单'),
+        (2, '其他'),
+    )
+    billId = models.IntegerField(primary_key=True,verbose_name='原始单据ID')
+    number = models.CharField(max_length=50, unique=True, verbose_name='单据编号')
+    type = models.IntegerField(choices=BOUND_TYPE, verbose_name='绑定类型')
+    date = models.CharField(max_length=10, verbose_name='入库时间')  
+    department = models.CharField(max_length=10, verbose_name='部门', null=True)
+    warehouse = models.CharField(max_length=10, verbose_name='仓库', default='W01')  # 修正 defaults 为 default
+    creater = models.CharField(max_length=50, verbose_name='创建人', null=True)
+    note = models.TextField(blank=True, verbose_name='备注说明', null=True)
+    totalCount = models.IntegerField(verbose_name='总条目数')
+    create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
+    update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')
+    is_delete = models.BooleanField(default=False, verbose_name='是否删除')
+
+    class Meta:
+        verbose_name = '生产入库单'
+        verbose_name_plural = verbose_name
+
+
+class MaterialDetail(models.Model):
+    """物料明细模型"""
+    bound_billId = models.ForeignKey(
+        InboundBill,
+        on_delete=models.CASCADE,
+        related_name='bill_id',
+        verbose_name='所属入库单'
+    )
+    entryIds = models.IntegerField(verbose_name='分录ID')
+    production_batch = models.CharField(max_length=50, verbose_name='生产批次')
+    goods_code = models.CharField(max_length=20, verbose_name='商品编码')
+    goods_name = models.CharField(max_length=100, verbose_name='商品名称')
+    goods_std = models.CharField(max_length=50, verbose_name='商品规格')
+    goods_weight = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='单件重量', default=1)
+    plan_qty = models.IntegerField(verbose_name='计划数量')
+    goods_total_weight = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='总重量', null=True)
+    goods_unit = models.CharField(max_length=20, verbose_name='计量单位')
+    note = models.TextField(blank=True, verbose_name='备注')
+    create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
+    update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')
+    is_delete = models.BooleanField(default=False, verbose_name='是否删除')
+
+    class Meta:
+        verbose_name = '物料明细'
+        verbose_name_plural = verbose_name
+        unique_together = [('bound_billId', 'entryIds')]

+ 81 - 0
erp/serializers.py

@@ -0,0 +1,81 @@
+from rest_framework import serializers
+from .models import InboundBill, MaterialDetail
+from utils import datasolve
+
+class InboundApplySerializer(serializers.ModelSerializer):
+    """
+    生产入库申请序列化器
+    """
+    class Meta:
+        model = InboundBill
+        exclude = [ 'creater', 'note', 'totalCount']
+        read_only_fields = ['billId', 'number', 'type', 'date', 'department', 'warehouse', 'creater', 'note', 'totalCount']
+
+class boundPostSerializer(serializers.Serializer):
+    """
+    生产入库申请序列化器
+    """
+    billId = serializers.IntegerField(required=True, label='原始单据ID')
+    number = serializers.CharField(required=True, label='单据编号')
+    type = serializers.IntegerField(required=True, label='绑定类型')
+    date = serializers.CharField(required=True, label='入库时间')
+    department = serializers.CharField(required=True, label='部门')
+    warehouse = serializers.CharField(required=True, label='仓库')
+    creater = serializers.CharField(required=True, label='创建人')
+    note = serializers.CharField(required=False, label='备注说明')
+    totalCount = serializers.IntegerField(required=True, label='总条目数')
+    materials = serializers.ListField(required=True, label='物料明细')
+    class Meta:
+        fields = ['billId', 'number', 'type', 'date', 'department', 'warehouse', 'creater', 'note', 'totalCount','materials']
+
+    def validate_materials(self, value):
+        """
+        增强版物料明细验证
+        返回带具体缺失字段的错误信息
+        """
+        required_fields = [
+            'entryIds', 'production_batch', 
+            'goods_code', 'goods_name', 'goods_std',
+            'plan_qty',
+            'goods_unit'
+        ]
+        
+        errors = []
+        
+        for index, item in enumerate(value):
+            # 识别缺失字段
+            missing_fields = [field for field in required_fields if field not in item]
+            
+            if missing_fields:
+                errors.append({
+                    "index": index,
+                    "entryIds": item.get('entryIds'),  # 保留原始标识
+                    "production_batch": item.get('production_batch'),
+                    "missing_fields": missing_fields,
+                    "message": f"第{index+1}条物料缺少必填字段: {', '.join(missing_fields)}"
+                })
+        
+        if errors:
+            # 抛出结构化错误
+            raise serializers.ValidationError([
+                {
+                    "detail": error["message"],
+                    "metadata": {
+                        "entryIds": error["entryIds"],
+                        "production_batch": error["production_batch"],
+                        "missing_fields": error["missing_fields"]
+                    }
+                } for error in errors
+            ])
+        
+        return value
+    
+
+class MaterialDetailSerializer(serializers.ModelSerializer):
+    """
+    物料明细序列化器
+    """
+    class Meta:
+        model = MaterialDetail
+        exclude = ['id', 'note']
+        read_only_fields = ['entryIds', 'production_batch', 'goods_code', 'goods_name', 'goods_std', 'goods_weight', 'plan_qty', 'goods_total_weight', 'goods_unit', 'note']

+ 22 - 0
erp/urls.py

@@ -0,0 +1,22 @@
+# urls.py
+from django.urls import path,re_path
+from . import views
+
+urlpatterns = [
+    path('createInboundApply', views.InboundApplyCreate.as_view()),
+    path('createOutboundApply', views.OutboundApplyCreate.as_view()),
+    path('updateBatchInfo', views.BatchUpdate.as_view()),
+    path('productInfo', views.ProductInfo.as_view()),
+
+    path('inboundBills', views.InboundBills.as_view({"get": "list"}),name="inboundBills"),
+    re_path(r'^inboundBills/(?P<pk>\d+)/$', views.InboundBills.as_view({
+        'get': 'retrieve'
+    }), name="inboundBills_1"),
+
+    path('materials', views.Materials.as_view({"get": "list"}),name="Materials"),
+    re_path(r'^materials/(?P<pk>\d+)/$', views.Materials.as_view({
+        'get': 'retrieve',
+
+    }), name="Materials_1"),
+
+]

+ 374 - 1
erp/views.py

@@ -1,3 +1,376 @@
-from django.shortcuts import render
+from rest_framework.views import APIView
+from rest_framework.response import Response
+from rest_framework.permissions import AllowAny
+from rest_framework import status
+from rest_framework import viewsets
+from django_filters.rest_framework import DjangoFilterBackend, OrderingFilter
+from django.utils import timezone
+from django.db.models import Q, F, Case, When
+from utils.page import MyPageNumberPagination
+from .models import *
+from .serializers import *
+from .filter import *
+import logging
 
+logger = logging.getLogger('wms.boundBill')
+
+class WMSResponse:
+    """
+    入库申请专用响应格式
+    使用示例:
+    return WMSResponse.success(data=serializer.data, total=2, success=2)
+    return WMSResponse.error(message='验证失败', total=2, fail_count=1, 
+                               fail_materials=[{...}])
+    """
+    
+    @staticmethod
+    def success(data, total, success, status=status.HTTP_201_CREATED):
+        """成功响应格式"""
+        logger.info('成功响应 | 数据: %s', data)
+        return Response({
+            "status": True,
+            "errorCode": status,
+            "message": "success",
+            "data": {
+                "failCount": 0,
+                "totalCount": total,
+                "successCount": success,
+                "fail_materials": []
+            }
+        }, status=status)
+
+    @staticmethod
+    def error(message, total, fail_count, fail_materials=None, 
+            status=status.HTTP_400_BAD_REQUEST, exception=None):
+        """错误响应格式"""
+        if fail_materials is None:
+            fail_materials = []
+            
+        # 记录详细错误日志
+        if exception:
+            logger.error(f"入库申请错误: {message}", exc_info=exception)
+            
+        return Response({
+            "status": False,
+            "errorCode": status,
+            "message": message,
+            "data": {
+                "failCount": fail_count,
+                "totalCount": total,
+                "successCount": total - fail_count,
+                "fail_materials": fail_materials
+            }
+        }, status=status)
 # Create your views here.
+# urlpatterns = [
+#     path('createInboundApply', views.InboundApplyCreate.as_view()),
+#     path('createOutboundApply', views.OutboundApplyCreate.as_view()),
+#     path('updateBatchInfo', views.BatchUpdate.as_view()),
+#     path('productInfo', views.ProductInfo.as_view()),
+
+
+# ]
+
+class InboundApplyCreate(APIView):
+    """
+    生产入库申请
+    """
+    authentication_classes = []
+    permission_classes = [AllowAny]
+
+    def post(self, request):
+        logger.info('生产入库申请请求 | 原始数据: %s', request.data)
+        
+        try:
+            total_count = len(request.data.get('materials', []))
+            if total_count == 0 :
+                return WMSResponse.error(
+                    message="物料清单不能为空",
+                    total=0,
+                    fail_count=0
+                )
+            if total_count != request.data.get('totalCount', 0):
+                return WMSResponse.error(
+                    message="物料数量不匹配",
+                    total=total_count,
+                    fail_count=total_count
+                )
+            
+            serializer = boundPostSerializer(data=request.data)
+            if not serializer.is_valid():
+          
+                return self._handle_validation_error(serializer.errors, total_count)
+
+            unique_result,error_details = self.find_unique_billid_and_number(serializer)
+            if not unique_result:
+                return WMSResponse.error(
+                    message="单据编号或原始单据ID重复",
+                    total=total_count,
+                    fail_count=total_count,
+                    fail_materials=[{
+                        "entryIds": None,
+                        "production_batch": None,
+                        "errors": error_details
+                    }]
+                )
+            # 保存或更新入库单
+            bound_bill = self.save_or_update_inbound_bill(serializer)
+
+            # 保存或更新物料明细
+            self.save_or_update_material_detail(bound_bill, serializer)
+            return WMSResponse.success( 
+                data=serializer.data,
+                total=total_count,
+                success=total_count
+            )
+
+        except Exception as e:
+            logger.exception("服务器内部错误")
+            return WMSResponse.error(
+                message="系统处理异常",
+                total=total_count,
+                fail_count=total_count,
+                status=status.HTTP_500_INTERNAL_SERVER_ERROR,
+                exception=e
+            )
+
+    def _handle_validation_error(self, errors, total_count):
+        """增强错误解析"""
+        fail_materials = []
+        
+        # 提取嵌套错误信息
+        material_errors = errors.get('materials', [])
+        
+        for error in material_errors:
+            # 解析DRF的错误结构
+            if isinstance(error, dict) and 'metadata' in error:
+                fail_materials.append({
+                    "entryIds": error['metadata'].get('entryIds'),
+                    "production_batch": error['metadata'].get('production_batch'),
+                    "errors": {
+                        "missing_fields": error['metadata']['missing_fields'],
+                        "message": error['detail']
+                    }
+                })
+        
+        return WMSResponse.error(
+            message="物料数据不完整",
+            total=total_count,
+            fail_count=len(fail_materials),
+            fail_materials=fail_materials
+    )
+
+    def _format_material_errors(self, error_dict):
+        """格式化单个物料的错误信息"""
+        return {
+            field: details[0] if isinstance(details, list) else details
+            for field, details in error_dict.items()
+        }
+
+    def find_unique_billid_and_number(self, serializer):
+        """增强版唯一性验证"""
+        bill_id = serializer.validated_data['billId']
+        number = serializer.validated_data['number']
+        
+        # 使用Q对象进行联合查询
+        duplicates_id = InboundBill.objects.filter(
+            Q(billId=bill_id) 
+        ).only('billId')
+        # 使用Q对象进行联合查询
+        duplicates_nu = InboundBill.objects.filter(
+            Q(number=number)
+        ).only( 'number')
+        
+        error_details = {}
+        
+        # 检查单据编号重复
+        if any(obj.billId != bill_id for obj in duplicates_nu):
+            error_details['number'] = ["number入库单编码已存在,但是系统中与之前入库单单据ID不一致,请检查"]
+        
+        
+        # 检查业务编号重复
+        if any(obj.number != number for obj in duplicates_id):
+            
+            error_details['billId'] = ["billId入库单单据ID已存在,但是系统中与之前入库申请单编码不一致,请检查"]
+        
+    
+        if error_details:
+            return False,error_details
+        return True,None
+        
+    def save_or_update_inbound_bill(self, serializer):
+        """保存或更新入库单"""
+        # 保存或更新入库单
+        try:
+            bound_bill = InboundBill.objects.get(billId=serializer.validated_data['billId'])
+            bound_bill.number = serializer.validated_data['number']
+            bound_bill.type = serializer.validated_data['type']
+            bound_bill.date = serializer.validated_data['date']
+            bound_bill.department = serializer.validated_data['department']
+            bound_bill.warehouse = serializer.validated_data['warehouse']
+            bound_bill.creater = serializer.validated_data['creater']
+            bound_bill.note = (serializer.validated_data['note'] if 'note' in serializer.validated_data else '')
+            bound_bill.totalCount = serializer.validated_data['totalCount']
+            bound_bill.update_time = timezone.now()
+            bound_bill.save()
+        except InboundBill.DoesNotExist:
+            bound_bill = InboundBill.objects.create(
+                billId=serializer.validated_data['billId'],
+                number=serializer.validated_data['number'],
+                type=serializer.validated_data['type'],
+                date=serializer.validated_data['date'],
+                department=serializer.validated_data['department'],
+                warehouse=serializer.validated_data['warehouse'],
+                creater=serializer.validated_data['creater'],
+                note=(serializer.validated_data['note'] if 'note' in serializer.validated_data else ''),
+                totalCount=serializer.validated_data['totalCount'],
+                create_time=timezone.now(),
+                update_time=timezone.now()
+            )
+        return bound_bill
+
+    def save_or_update_material_detail(self, bound_bill, serializer):
+        """保存或更新物料明细"""
+        # 保存或更新物料明细
+        for item in serializer.validated_data['materials']:
+            try:
+                material_detail = MaterialDetail.objects.get(bound_billId=bound_bill, entryIds=item['entryIds'])
+                material_detail.production_batch = item['production_batch']
+        
+                material_detail.goods_code = item['goods_code']
+                material_detail.goods_name = item['goods_name']
+                material_detail.goods_std = item['goods_std']
+         
+                material_detail.plan_qty = item['plan_qty']
+                material_detail.goods_total_weight = item['plan_qty']
+                material_detail.goods_unit = item['goods_unit']
+                material_detail.note = (item['note'] if 'note' in item else '')
+                material_detail.update_time = timezone.now()
+                material_detail.save()
+            except MaterialDetail.DoesNotExist:
+                material_detail = MaterialDetail.objects.create(
+                    bound_billId=bound_bill,
+                    entryIds=item['entryIds'],
+                    production_batch=item['production_batch'],
+                    goods_code=item['goods_code'],
+                    goods_name=item['goods_name'],
+                    goods_std=item['goods_std'],
+                    goods_weight=1,
+                    plan_qty=item['plan_qty'],
+                    goods_total_weight=item['plan_qty'],
+                    goods_unit=item['goods_unit'],
+                    note=(item['note'] if 'note' in item else ''),
+                    create_time=timezone.now(),
+                    update_time=timezone.now()
+                )
+        return material_detail
+class OutboundApplyCreate(APIView):
+    """
+    生产出库申请
+    """
+    authentication_classes = []  # 禁用所有认证类
+    permission_classes = [AllowAny]  # 允许任意访问
+    def post(self, request):
+
+        return Response(status=status.HTTP_200_OK)
+
+class BatchUpdate(APIView):
+    """
+    批次信息更新
+    """
+    authentication_classes = []  # 禁用所有认证类
+    permission_classes = [AllowAny]  # 允许任意访问
+    def post(self, request):
+        logger.info('批次信息更新')
+        serializer = BatchUpdateSerializer(data=request.data)
+        return Response(serializer.data, status=status.HTTP_200_OK)
+
+class ProductInfo(APIView):
+    """
+    商品信息查询
+    """
+    authentication_classes = []  # 禁用所有认证类
+    permission_classes = [AllowAny]  # 允许任意访问
+    def post(self, request):
+        logger.info('商品信息查询')
+        serializer = ProductInfoSerializer(data=request.data)
+        return Response(serializer.data, status=status.HTTP_200_OK)
+
+class InboundBills(viewsets.ModelViewSet):
+    """
+        retrieve:
+            Response a data list(get)
+        list:
+            Response a data list(all)
+    """
+    authentication_classes = []  # 禁用所有认证类
+    permission_classes = [AllowAny]  # 允许任意访问
+    
+    pagination_class = MyPageNumberPagination   
+    filter_backends = [DjangoFilterBackend, OrderingFilter, ]
+    ordering_fields = ['id', "create_time", "update_time", ]
+    filter_class = InboundBillFilter
+
+    def get_project(self):
+        try:
+            id = self.kwargs.get('pk')
+            return id
+        except:
+            return None
+
+    def get_queryset(self):
+        id = self.get_project()
+        if self.request.user:
+            if id is None:
+                return InboundBill.objects.filter(is_delete=False)
+            else:
+                return InboundBill.objects.filter(id=id)
+        else:
+            return InboundBill.objects.none()
+    def  get_serializer_class(self):
+        if self.action in ['retrieve', 'list']:
+            return InboundApplySerializer
+        else:
+            return self.http_method_not_allowed(request=self.request)
+
+class Materials(viewsets.ModelViewSet):
+    """
+        retrieve:
+            Response a data list(get)
+        list:
+            Response a data list(all)
+    """
+    authentication_classes = []  # 禁用所有认证类
+    permission_classes = [AllowAny]  # 允许任意访问
+    
+    pagination_class = MyPageNumberPagination   
+    filter_backends = [DjangoFilterBackend, OrderingFilter, ]
+    ordering_fields = ['id', "create_time", "update_time", ]
+    filter_class = MaterialDetailFilter
+
+    def get_project(self):
+        try:
+            id = self.kwargs.get('pk')
+            return id
+        except:
+            return None
+
+    def get_queryset(self):
+        id = self.get_project()
+        if self.request.user:
+            if id is None:
+                return MaterialDetail.objects.filter(is_delete=False)
+            else:
+                return MaterialDetail.objects.filter(id=id)
+        else:
+            return MaterialDetail.objects.none()
+
+    def  get_serializer_class(self):
+        if self.action in ['retrieve', 'list']:
+            return MaterialDetailSerializer
+        else:
+            return self.http_method_not_allowed(request=self.request)   
+
+
+
+

BIN
greaterwms/__pycache__/settings.cpython-38.pyc


BIN
greaterwms/__pycache__/urls.cpython-38.pyc


+ 17 - 2
greaterwms/settings.py

@@ -40,6 +40,7 @@ INSTALLED_APPS = [
     'bound.apps.BoundConfig',
     'container.apps.ContainerConfig',
     'bin.apps.BinConfig',
+    'erp.apps.ErpConfig',
 
     'throttle.apps.ThrottleConfig',
     'rest_framework',
@@ -258,7 +259,7 @@ LOGGING = {
             "class": "logging.handlers.RotatingFileHandler",
             "filename": SERVER_LOGS_FILE,
             "maxBytes": 1024 * 1024 * 100,
-            "backupCount": 5,
+            "backupCount": 30,
             "formatter": "standard",
             "encoding": "utf-8",
         },
@@ -267,7 +268,7 @@ LOGGING = {
             "class": "logging.handlers.RotatingFileHandler",
             "filename": ERROR_LOGS_FILE,
             "maxBytes": 1024 * 1024 * 100,
-            "backupCount": 3,
+            "backupCount": 30,
             "formatter": "standard",
             "encoding": "utf-8",
         },
@@ -276,8 +277,22 @@ LOGGING = {
             "class": "logging.StreamHandler",
             "formatter": "console",
         },
+        'boundBill': {
+            'level': 'INFO',
+            'class': 'logging.handlers.RotatingFileHandler',
+            'filename': 'logs/boundBill.log',
+            "maxBytes": 1024 * 1024 * 100,
+            "backupCount": 30,
+            "formatter": "standard",
+            "encoding": "utf-8",
+        },
+
     },
     "loggers": {
+        'wms.boundBill': {
+            'handlers': ['boundBill'],
+            'level': 'INFO',
+        },
         "django": {
             "handlers": ["console", "error", "file"],
             "level": "INFO",

+ 1 - 0
greaterwms/urls.py

@@ -29,6 +29,7 @@ urlpatterns = [
 
     path('bound/', include('bound.urls')),
     path('container/', include('container.urls')),
+    path ('wms/', include('erp.urls')),
 
 
     re_path(r'^favicon\.ico$', views.favicon, name='favicon'),

Plik diff jest za duży
+ 2 - 0
logs/boundBill.log


+ 429 - 0
logs/error.log

@@ -182,3 +182,432 @@ AssertionError: Expected a `Response`, `HttpResponse` or `HttpStreamingResponse`
 [2025-04-28 23:50:22,878][django.request.log_response():241] [ERROR] Internal Server Error: /container/container_wcs/update/
 [2025-04-28 23:51:03,786][django.request.log_response():241] [ERROR] Internal Server Error: /container/container_wcs/update/
 [2025-04-28 23:53:10,876][django.request.log_response():241] [ERROR] Internal Server Error: /container/container_wcs/update/
+[2025-04-29 14:07:35,895][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "d:\language\python38\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "d:\language\python38\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "d:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "d:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\generic\base.py", line 103, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "D:\Document\code\vue\greater_wms\.\erp\views.py", line 34, in post
+    return Response(serializer.data, status=status.HTTP_200_OK)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 555, in data
+    ret = super().data
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 249, in data
+    raise AssertionError(msg)
+AssertionError: When a serializer is passed a `data` keyword argument you must call `.is_valid()` before attempting to access the serialized `.data` representation.
+You should either call `.is_valid()` first, or access `.initial_data` instead.
+[2025-04-29 14:10:21,714][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "d:\language\python38\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "d:\language\python38\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "d:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "d:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\generic\base.py", line 103, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "D:\Document\code\vue\greater_wms\.\erp\views.py", line 34, in post
+    return Response(serializer.data, status=status.HTTP_200_OK)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 555, in data
+    ret = super().data
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 249, in data
+    raise AssertionError(msg)
+AssertionError: When a serializer is passed a `data` keyword argument you must call `.is_valid()` before attempting to access the serialized `.data` representation.
+You should either call `.is_valid()` first, or access `.initial_data` instead.
+[2025-04-29 14:11:52,725][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "d:\language\python38\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "d:\language\python38\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "d:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "d:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\generic\base.py", line 103, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "D:\Document\code\vue\greater_wms\.\erp\views.py", line 35, in post
+    return Response(serializer.data, status=status.HTTP_200_OK)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 555, in data
+    ret = super().data
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 249, in data
+    raise AssertionError(msg)
+AssertionError: When a serializer is passed a `data` keyword argument you must call `.is_valid()` before attempting to access the serialized `.data` representation.
+You should either call `.is_valid()` first, or access `.initial_data` instead.
+[2025-04-29 14:17:03,095][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "d:\language\python38\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "d:\language\python38\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "d:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "d:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\generic\base.py", line 103, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "D:\Document\code\vue\greater_wms\.\erp\views.py", line 36, in post
+    return Response(serializer.data, status=status.HTTP_200_OK)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 555, in data
+    ret = super().data
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 249, in data
+    raise AssertionError(msg)
+AssertionError: When a serializer is passed a `data` keyword argument you must call `.is_valid()` before attempting to access the serialized `.data` representation.
+You should either call `.is_valid()` first, or access `.initial_data` instead.
+[2025-04-29 14:17:36,089][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "d:\language\python38\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "d:\language\python38\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "d:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "d:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\generic\base.py", line 103, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "D:\Document\code\vue\greater_wms\.\erp\views.py", line 36, in post
+    return Response(serializer.data, status=status.HTTP_200_OK)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 555, in data
+    ret = super().data
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 249, in data
+    raise AssertionError(msg)
+AssertionError: When a serializer is passed a `data` keyword argument you must call `.is_valid()` before attempting to access the serialized `.data` representation.
+You should either call `.is_valid()` first, or access `.initial_data` instead.
+[2025-04-29 14:18:28,799][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "d:\language\python38\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "d:\language\python38\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "d:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "d:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\generic\base.py", line 103, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "D:\Document\code\vue\greater_wms\.\erp\views.py", line 35, in post
+    print(serializer.data)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 555, in data
+    ret = super().data
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 249, in data
+    raise AssertionError(msg)
+AssertionError: When a serializer is passed a `data` keyword argument you must call `.is_valid()` before attempting to access the serialized `.data` representation.
+You should either call `.is_valid()` first, or access `.initial_data` instead.
+[2025-04-29 14:35:59,715][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "d:\language\python38\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "d:\language\python38\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "d:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "d:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\generic\base.py", line 103, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "D:\Document\code\vue\greater_wms\.\erp\views.py", line 36, in post
+    serializer.save()
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 212, in save
+    self.instance = self.create(validated_data)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 177, in create
+    raise NotImplementedError('`create()` must be implemented.')
+NotImplementedError: `create()` must be implemented.
+[2025-04-29 14:45:10,911][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "d:\language\python38\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "d:\language\python38\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "d:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "d:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\generic\base.py", line 103, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "D:\Document\code\vue\greater_wms\.\erp\views.py", line 36, in post
+    if serializer.is_valid():
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 212, in save
+    self.instance = self.create(validated_data)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 177, in create
+    raise NotImplementedError('`create()` must be implemented.')
+NotImplementedError: `create()` must be implemented.
+[2025-04-29 14:45:26,800][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "d:\language\python38\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "d:\language\python38\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "d:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "d:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\generic\base.py", line 103, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "D:\Document\code\vue\greater_wms\.\erp\views.py", line 37, in post
+    if serializer.validate_materials[serializer.data['materials']]:
+TypeError: 'method' object is not subscriptable
+[2025-04-29 14:47:14,193][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "d:\language\python38\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "d:\language\python38\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "d:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "d:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\generic\base.py", line 103, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "D:\Document\code\vue\greater_wms\.\erp\views.py", line 38, in post
+    if serializer.validate_materials[serializer.data['materials']]:
+TypeError: 'method' object is not subscriptable
+[2025-04-29 14:48:26,662][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "d:\language\python38\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "d:\language\python38\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "d:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "d:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\generic\base.py", line 103, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "D:\Document\code\vue\greater_wms\.\erp\views.py", line 38, in post
+    if boundPostSerializer.validate_materials[serializer.data['materials']]:
+TypeError: 'function' object is not subscriptable
+[2025-04-29 14:51:55,672][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "d:\language\python38\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "d:\language\python38\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "d:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "d:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\generic\base.py", line 103, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "D:\Document\code\vue\greater_wms\.\erp\views.py", line 37, in post
+    return Response(serializer.data, status=status.HTTP_200_OK)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 212, in save
+    self.instance = self.create(validated_data)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 177, in create
+    raise NotImplementedError('`create()` must be implemented.')
+NotImplementedError: `create()` must be implemented.
+[2025-04-29 15:07:26,331][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+[2025-04-29 15:07:45,416][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+[2025-04-29 15:10:14,218][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+[2025-04-29 15:11:57,568][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+[2025-04-29 15:12:59,011][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+[2025-04-29 15:14:52,100][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+[2025-04-29 15:17:47,779][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+[2025-04-29 15:25:17,733][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+[2025-04-29 15:37:58,323][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+[2025-04-29 15:40:35,183][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+[2025-04-29 15:49:12,097][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+[2025-04-29 15:54:05,491][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+[2025-04-29 16:08:29,497][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+[2025-04-29 16:10:17,335][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+[2025-04-29 16:11:26,783][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply

+ 447 - 0
logs/server.log

@@ -197,3 +197,450 @@ AssertionError: Expected a `Response`, `HttpResponse` or `HttpStreamingResponse`
 [2025-04-28 23:51:03,786][django.request.log_response():241] [ERROR] Internal Server Error: /container/container_wcs/update/
 [2025-04-28 23:53:10,876][django.request.log_response():241] [ERROR] Internal Server Error: /container/container_wcs/update/
 [2025-04-28 23:53:47,706][django.request.log_response():241] [WARNING] Bad Request: /container/container_wcs/update/
+[2025-04-29 14:07:35,895][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "d:\language\python38\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "d:\language\python38\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "d:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "d:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\generic\base.py", line 103, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "D:\Document\code\vue\greater_wms\.\erp\views.py", line 34, in post
+    return Response(serializer.data, status=status.HTTP_200_OK)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 555, in data
+    ret = super().data
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 249, in data
+    raise AssertionError(msg)
+AssertionError: When a serializer is passed a `data` keyword argument you must call `.is_valid()` before attempting to access the serialized `.data` representation.
+You should either call `.is_valid()` first, or access `.initial_data` instead.
+[2025-04-29 14:10:21,714][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "d:\language\python38\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "d:\language\python38\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "d:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "d:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\generic\base.py", line 103, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "D:\Document\code\vue\greater_wms\.\erp\views.py", line 34, in post
+    return Response(serializer.data, status=status.HTTP_200_OK)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 555, in data
+    ret = super().data
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 249, in data
+    raise AssertionError(msg)
+AssertionError: When a serializer is passed a `data` keyword argument you must call `.is_valid()` before attempting to access the serialized `.data` representation.
+You should either call `.is_valid()` first, or access `.initial_data` instead.
+[2025-04-29 14:11:52,725][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "d:\language\python38\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "d:\language\python38\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "d:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "d:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\generic\base.py", line 103, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "D:\Document\code\vue\greater_wms\.\erp\views.py", line 35, in post
+    return Response(serializer.data, status=status.HTTP_200_OK)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 555, in data
+    ret = super().data
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 249, in data
+    raise AssertionError(msg)
+AssertionError: When a serializer is passed a `data` keyword argument you must call `.is_valid()` before attempting to access the serialized `.data` representation.
+You should either call `.is_valid()` first, or access `.initial_data` instead.
+[2025-04-29 14:17:03,095][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "d:\language\python38\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "d:\language\python38\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "d:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "d:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\generic\base.py", line 103, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "D:\Document\code\vue\greater_wms\.\erp\views.py", line 36, in post
+    return Response(serializer.data, status=status.HTTP_200_OK)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 555, in data
+    ret = super().data
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 249, in data
+    raise AssertionError(msg)
+AssertionError: When a serializer is passed a `data` keyword argument you must call `.is_valid()` before attempting to access the serialized `.data` representation.
+You should either call `.is_valid()` first, or access `.initial_data` instead.
+[2025-04-29 14:17:36,089][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "d:\language\python38\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "d:\language\python38\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "d:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "d:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\generic\base.py", line 103, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "D:\Document\code\vue\greater_wms\.\erp\views.py", line 36, in post
+    return Response(serializer.data, status=status.HTTP_200_OK)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 555, in data
+    ret = super().data
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 249, in data
+    raise AssertionError(msg)
+AssertionError: When a serializer is passed a `data` keyword argument you must call `.is_valid()` before attempting to access the serialized `.data` representation.
+You should either call `.is_valid()` first, or access `.initial_data` instead.
+[2025-04-29 14:18:28,799][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "d:\language\python38\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "d:\language\python38\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "d:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "d:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\generic\base.py", line 103, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "D:\Document\code\vue\greater_wms\.\erp\views.py", line 35, in post
+    print(serializer.data)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 555, in data
+    ret = super().data
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 249, in data
+    raise AssertionError(msg)
+AssertionError: When a serializer is passed a `data` keyword argument you must call `.is_valid()` before attempting to access the serialized `.data` representation.
+You should either call `.is_valid()` first, or access `.initial_data` instead.
+[2025-04-29 14:19:16,450][django.request.log_response():241] [WARNING] Bad Request: /wms/createInboundApply
+[2025-04-29 14:34:40,402][django.request.log_response():241] [WARNING] Bad Request: /wms/createInboundApply
+[2025-04-29 14:35:40,636][django.request.log_response():241] [WARNING] Bad Request: /wms/createInboundApply
+[2025-04-29 14:35:59,715][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "d:\language\python38\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "d:\language\python38\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "d:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "d:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\generic\base.py", line 103, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "D:\Document\code\vue\greater_wms\.\erp\views.py", line 36, in post
+    serializer.save()
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 212, in save
+    self.instance = self.create(validated_data)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 177, in create
+    raise NotImplementedError('`create()` must be implemented.')
+NotImplementedError: `create()` must be implemented.
+[2025-04-29 14:45:10,911][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "d:\language\python38\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "d:\language\python38\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "d:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "d:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\generic\base.py", line 103, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "D:\Document\code\vue\greater_wms\.\erp\views.py", line 36, in post
+    if serializer.is_valid():
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 212, in save
+    self.instance = self.create(validated_data)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 177, in create
+    raise NotImplementedError('`create()` must be implemented.')
+NotImplementedError: `create()` must be implemented.
+[2025-04-29 14:45:26,800][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "d:\language\python38\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "d:\language\python38\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "d:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "d:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\generic\base.py", line 103, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "D:\Document\code\vue\greater_wms\.\erp\views.py", line 37, in post
+    if serializer.validate_materials[serializer.data['materials']]:
+TypeError: 'method' object is not subscriptable
+[2025-04-29 14:47:14,193][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "d:\language\python38\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "d:\language\python38\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "d:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "d:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\generic\base.py", line 103, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "D:\Document\code\vue\greater_wms\.\erp\views.py", line 38, in post
+    if serializer.validate_materials[serializer.data['materials']]:
+TypeError: 'method' object is not subscriptable
+[2025-04-29 14:48:26,662][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "d:\language\python38\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "d:\language\python38\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "d:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "d:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\generic\base.py", line 103, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "D:\Document\code\vue\greater_wms\.\erp\views.py", line 38, in post
+    if boundPostSerializer.validate_materials[serializer.data['materials']]:
+TypeError: 'function' object is not subscriptable
+[2025-04-29 14:50:10,255][django.request.log_response():241] [WARNING] Bad Request: /wms/createInboundApply
+[2025-04-29 14:51:55,672][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 472, in thread_handler
+    raise exc_info[1]
+  File "d:\language\python38\lib\site-packages\django\core\handlers\exception.py", line 42, in inner
+    response = await get_response(request)
+  File "d:\language\python38\lib\site-packages\django\core\handlers\base.py", line 253, in _get_response_async
+    response = await wrapped_callback(
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 435, in __call__
+    ret = await asyncio.wait_for(future, timeout=None)
+  File "d:\language\python38\lib\asyncio\tasks.py", line 455, in wait_for
+    return await fut
+  File "d:\language\python38\lib\concurrent\futures\thread.py", line 57, in run
+    result = self.fn(*self.args, **self.kwargs)
+  File "d:\language\python38\lib\site-packages\asgiref\sync.py", line 476, in thread_handler
+    return func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
+    return view_func(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\views\generic\base.py", line 103, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 509, in dispatch
+    response = self.handle_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
+    self.raise_uncaught_exception(exc)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
+    raise exc
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 506, in dispatch
+    response = handler(request, *args, **kwargs)
+  File "D:\Document\code\vue\greater_wms\.\erp\views.py", line 37, in post
+    return Response(serializer.data, status=status.HTTP_200_OK)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 212, in save
+    self.instance = self.create(validated_data)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 177, in create
+    raise NotImplementedError('`create()` must be implemented.')
+NotImplementedError: `create()` must be implemented.
+[2025-04-29 15:07:26,331][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+[2025-04-29 15:07:45,416][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+[2025-04-29 15:10:14,218][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+[2025-04-29 15:11:57,568][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+[2025-04-29 15:12:59,011][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+[2025-04-29 15:14:52,100][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+[2025-04-29 15:17:47,779][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+[2025-04-29 15:25:17,733][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+[2025-04-29 15:28:57,954][django.request.log_response():241] [WARNING] Bad Request: /wms/createInboundApply
+[2025-04-29 15:29:20,860][django.request.log_response():241] [WARNING] Bad Request: /wms/createInboundApply
+[2025-04-29 15:31:51,311][django.request.log_response():241] [WARNING] Bad Request: /wms/createInboundApply
+[2025-04-29 15:37:48,450][django.request.log_response():241] [WARNING] Bad Request: /wms/createInboundApply
+[2025-04-29 15:37:58,323][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+[2025-04-29 15:40:35,183][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+[2025-04-29 15:49:12,097][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+[2025-04-29 15:52:21,054][django.request.log_response():241] [WARNING] Bad Request: /wms/createInboundApply
+[2025-04-29 15:54:05,491][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+[2025-04-29 16:08:29,497][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+[2025-04-29 16:10:17,335][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+[2025-04-29 16:11:26,783][django.request.log_response():241] [ERROR] Internal Server Error: /wms/createInboundApply
+[2025-04-29 16:14:58,666][django.request.log_response():241] [WARNING] Bad Request: /wms/createInboundApply
+[2025-04-29 16:17:59,927][django.request.log_response():241] [WARNING] Bad Request: /wms/createInboundApply
+[2025-04-29 16:18:15,140][django.request.log_response():241] [WARNING] Bad Request: /wms/createInboundApply
+[2025-04-29 16:18:24,775][django.request.log_response():241] [WARNING] Bad Request: /wms/createInboundApply
+[2025-04-29 17:03:37,813][django.request.log_response():241] [WARNING] Bad Request: /wms/createInboundApply
+[2025-04-29 17:03:41,843][django.request.log_response():241] [WARNING] Bad Request: /wms/createInboundApply
+[2025-04-29 17:11:38,862][django.request.log_response():241] [WARNING] Bad Request: /wms/createInboundApply
+[2025-04-29 17:11:54,080][django.request.log_response():241] [WARNING] Bad Request: /wms/createInboundApply
+[2025-04-29 17:15:32,234][django.request.log_response():241] [WARNING] Bad Request: /wms/createInboundApply

BIN
utils/__pycache__/throttle.cpython-38.pyc


+ 1 - 1
utils/throttle.py

@@ -10,7 +10,7 @@ class VisitThrottle(BaseThrottle):
     def allow_request(self, request, view):
         if request.path in ['/api/docs/', '/api/debug/', '/api/']:
             return (False, None)
-        elif request.path in ['/container/container_wcs/','/container/container_wcs/update/','/container/batch/']:
+        elif request.path in ['/container/container_wcs/','/container/container_wcs/update/','/container/batch/','/wms/createInboundApply']:
             return True
         else:
             ip = request.META.get('HTTP_X_FORWARDED_FOR') if request.META.get(