Просмотр исходного кода

完成PDA查批次组盘操作

flower_mr 2 месяцев назад
Родитель
Сommit
7101691445
36 измененных файлов с 2174 добавлено и 6 удалено
  1. BIN
      bound/__pycache__/filter.cpython-38.pyc
  2. BIN
      bound/__pycache__/models.cpython-38.pyc
  3. BIN
      bound/__pycache__/serializers.cpython-38.pyc
  4. 5 0
      bound/filter.py
  5. 4 1
      bound/migrations/0001_initial.py
  6. 18 0
      bound/migrations/0002_bounddetailmodel_status.py
  7. BIN
      bound/migrations/__pycache__/0001_initial.cpython-38.pyc
  8. BIN
      bound/migrations/__pycache__/0002_bounddetailmodel_status.cpython-38.pyc
  9. 23 1
      bound/models.py
  10. 12 1
      bound/serializers.py
  11. BIN
      container/__pycache__/__init__.cpython-38.pyc
  12. BIN
      container/__pycache__/admin.cpython-38.pyc
  13. BIN
      container/__pycache__/apps.cpython-38.pyc
  14. BIN
      container/__pycache__/filter.cpython-38.pyc
  15. BIN
      container/__pycache__/models.cpython-38.pyc
  16. BIN
      container/__pycache__/serializers.cpython-38.pyc
  17. BIN
      container/__pycache__/urls.cpython-38.pyc
  18. BIN
      container/__pycache__/views.cpython-38.pyc
  19. 4 0
      container/admin.py
  20. 56 0
      container/filter.py
  21. 80 0
      container/migrations/0001_initial.py
  22. 23 0
      container/migrations/0002_alter_containerdetailmodel_month_and_more.py
  23. BIN
      container/migrations/__pycache__/0001_initial.cpython-38.pyc
  24. BIN
      container/migrations/__pycache__/0002_alter_containerdetailmodel_month_and_more.cpython-38.pyc
  25. BIN
      container/migrations/__pycache__/__init__.cpython-38.pyc
  26. 69 1
      container/models.py
  27. 171 0
      container/serializers.py
  28. 19 0
      container/urls.py
  29. 326 2
      container/views.py
  30. BIN
      db.sqlite3
  31. BIN
      greaterwms/__pycache__/settings.cpython-38.pyc
  32. BIN
      greaterwms/__pycache__/urls.cpython-38.pyc
  33. 1 0
      greaterwms/settings.py
  34. 1 0
      greaterwms/urls.py
  35. 669 0
      logs/error.log
  36. 693 0
      logs/server.log

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


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


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


+ 5 - 0
bound/filter.py

@@ -52,6 +52,8 @@ class BoundDetailFilter(FilterSet):
             "detail_code" : ['icontains', 'exact'],
             "bound_list" : ['exact'],
             "bound_batch" : ['exact'],
+            'status': ['exact', 'gt', 'gte', 'lt', 'lte', 'icontains','range'],
+
            
             'creater': ['icontains', 'exact'],
             'openid': ['exact'],
@@ -92,6 +94,9 @@ class BoundBatchFilter(FilterSet):
             'goods_code': ['icontains', 'exact'],
             'goods_desc': ['icontains', 'exact'],
             'goods_qty': ['exact', 'gt', 'gte', 'lt', 'lte', 'icontains','range'],
+            'goods_in_qty': ['exact', 'gt', 'gte', 'lt', 'lte', 'icontains','range'],
+            'goods_out_qty': ['exact', 'gt', 'gte', 'lt', 'lte', 'icontains','range'],
+            'status': ['exact', 'gt', 'gte', 'lt', 'lte', 'icontains','range'],
             'goods_weight': ['exact', 'gt', 'gte', 'lt', 'lte', 'icontains','range'],
             'goods_total_weight': ['exact', 'gt', 'gte', 'lt', 'lte', 'icontains','range'],
             

+ 4 - 1
bound/migrations/0001_initial.py

@@ -1,4 +1,4 @@
-# Generated by Django 4.1.2 on 2025-03-27 20:26
+# Generated by Django 4.1.2 on 2025-03-29 09:49
 
 from django.db import migrations, models
 import django.db.models.deletion
@@ -23,6 +23,9 @@ class Migration(migrations.Migration):
                 ('goods_code', models.CharField(max_length=255, verbose_name='商品编码')),
                 ('goods_desc', models.CharField(max_length=255, verbose_name='商品描述')),
                 ('goods_qty', models.BigIntegerField(default=0, verbose_name='商品数量')),
+                ('goods_in_qty', models.BigIntegerField(default=0, verbose_name='入库数量')),
+                ('goods_out_qty', models.BigIntegerField(default=0, verbose_name='出库数量')),
+                ('status', models.IntegerField(choices=[(0, '入库申请'), (1, '入库中'), (2, '在库'), (3, '出库中'), (4, '已出库')], default=0, verbose_name='批次状态')),
                 ('goods_weight', models.FloatField(default=0, verbose_name='商品单重')),
                 ('goods_total_weight', models.FloatField(default=0, verbose_name='商品总重')),
                 ('creater', models.CharField(default='uesr', max_length=255, verbose_name='Who Created')),

+ 18 - 0
bound/migrations/0002_bounddetailmodel_status.py

@@ -0,0 +1,18 @@
+# Generated by Django 4.1.2 on 2025-03-29 15:53
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('bound', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='bounddetailmodel',
+            name='status',
+            field=models.IntegerField(choices=[(0, '入库申请'), (1, '入库中'), (2, '在库'), (3, '出库中'), (4, '已出库')], default=0, verbose_name='批次状态'),
+        ),
+    ]

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


BIN
bound/migrations/__pycache__/0002_bounddetailmodel_status.cpython-38.pyc


+ 23 - 1
bound/models.py

@@ -31,6 +31,14 @@ class BoundListModel(models.Model):
 
 class BoundBatchModel(models.Model):
 
+    CONTAINER_STATUS = (
+        (0, '入库申请'),
+        (1, '入库中'),
+        (2, '在库'),
+        (3, '出库中'),
+        (4, '已出库')
+    )
+
     bound_number = models.CharField(max_length=255, verbose_name="入库批次号")
     bound_month = models.CharField(max_length=255, verbose_name="月份")
   
@@ -39,6 +47,11 @@ class BoundBatchModel(models.Model):
     goods_code = models.CharField(max_length=255, verbose_name="商品编码")
     goods_desc = models.CharField(max_length=255, verbose_name="商品描述")
     goods_qty = models.BigIntegerField(default=0, verbose_name="商品数量")
+    goods_in_qty = models.BigIntegerField(default=0, verbose_name="入库数量")
+    goods_out_qty = models.BigIntegerField(default=0, verbose_name="出库数量")
+
+    status = models.IntegerField(choices=CONTAINER_STATUS, default=0, verbose_name='批次状态')
+
     goods_weight = models.FloatField(default=0, verbose_name="商品单重")
     goods_total_weight = models.FloatField(default=0, verbose_name="商品总重")
 
@@ -56,9 +69,18 @@ class BoundBatchModel(models.Model):
         
 
 class BoundDetailModel(models.Model):
-    
+    CONTAINER_STATUS = (
+        (0, '入库申请'),
+        (1, '入库中'),
+        (2, '在库'),
+        (3, '出库中'),
+        (4, '已出库')
+    )
+
     bound_list = models.ForeignKey(BoundListModel, on_delete=models.CASCADE, verbose_name="Bound List", related_name='bound_detail')
     bound_batch = models.ForeignKey(BoundBatchModel, on_delete=models.PROTECT, verbose_name="Bound Batch", related_name='bound_batch_detail')
+    status = models.IntegerField(choices=CONTAINER_STATUS, default=0, verbose_name='批次状态')
+    
     detail_code = models.CharField(max_length=255, verbose_name="明细编号",unique=True)
     creater = models.CharField(default='uesr', max_length=255, verbose_name="Who Created")
     openid = models.CharField(max_length=255, verbose_name="Openid")

+ 12 - 1
bound/serializers.py

@@ -60,6 +60,9 @@ class BoundBatchGetSerializer(serializers.ModelSerializer):
     goods_code = serializers.CharField(read_only=True, required=False)
     goods_desc = serializers.CharField(read_only=True, required=False)
     goods_qty = serializers.IntegerField(read_only=True, required=False)
+    goods_in_qty = serializers.IntegerField(read_only=True, required=False)
+    goods_out_qty = serializers.IntegerField(read_only=True, required=False)
+    status = serializers.IntegerField(read_only=True, required=False)
     goods_weight = serializers.FloatField(read_only=True, required=False)
     goods_total_weight = serializers.FloatField(read_only=True, required=False)
     creater = serializers.CharField(read_only=True, required=False)
@@ -83,6 +86,9 @@ class BoundBatchPostSerializer(serializers.ModelSerializer):
     goods_code = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])
     goods_desc = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])
     goods_qty = serializers.IntegerField(read_only=False, required=True, validators=[datasolve.data_validate])
+    goods_in_qty = serializers.IntegerField(read_only=False, required=False, validators=[datasolve.data_validate])
+    goods_out_qty = serializers.IntegerField(read_only=False, required=False, validators=[datasolve.data_validate])
+    status = serializers.IntegerField(read_only=False, required=False, validators=[datasolve.data_validate])
     goods_weight = serializers.FloatField(read_only=False, required=True, validators=[datasolve.data_validate])
 
     goods_total_weight = serializers.FloatField(read_only=False, required=False, validators=[datasolve.data_validate])
@@ -108,6 +114,8 @@ class BoundDetailGetSerializer(serializers.ModelSerializer):
     bound_list = serializers.SerializerMethodField()
     bound_batch = serializers.SerializerMethodField()
     detail_code = serializers.CharField(read_only=True, required=False)
+    status = serializers.IntegerField(read_only=False, required=False)
+
 
     # 定义其他字段,只读
     creater = serializers.CharField(source='creater.username', read_only=True)
@@ -125,7 +133,8 @@ class BoundDetailGetSerializer(serializers.ModelSerializer):
             'creater',
             'create_time',
             'update_time',
-            'is_delete'
+            'is_delete',
+            'status'
         ]
         read_only_fields = ['__all__']
 
@@ -171,6 +180,8 @@ class BoundDetailPostSerializer(serializers.ModelSerializer):
     )
 
     detail_code = serializers.CharField(read_only=False, required=False)
+    status = serializers.IntegerField(read_only=False, required=False)
+
 
     class Meta:
         # 指定模型和字段,部分字段只读

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


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


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


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


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


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


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


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


+ 4 - 0
container/admin.py

@@ -1,3 +1,7 @@
 from django.contrib import admin
+from .models import ContainerListModel,ContainerDetailModel,ContainerOperationModel
 
+admin.site.register(ContainerListModel)
+admin.site.register(ContainerDetailModel)
+admin.site.register(ContainerOperationModel)
 # Register your models here.

+ 56 - 0
container/filter.py

@@ -0,0 +1,56 @@
+from django_filters import FilterSet
+from .models import ContainerListModel,ContainerDetailModel,ContainerOperationModel
+
+class ContainerListFilter(FilterSet):
+
+    class Meta:
+        model = ContainerListModel
+        fields = {
+            "id": ['exact', 'gt', 'gte', 'lt', 'lte', 'isnull', 'in', 'range'],
+            "container_code": ['exact', 'icontains'],
+            "current_location": ['exact', 'icontains'],
+            "status": ['exact', 'icontains'],
+            "last_operation": ['exact', 'icontains'],
+        }
+
+class ContainerDetailFilter(FilterSet):
+     class Meta:
+        model = ContainerDetailModel
+        fields = {
+            "id": ['exact', 'gt', 'gte', 'lt', 'lte', 'isnull', 'in', 'range'],
+            "month": ['exact', 'gt', 'gte', 'lt', 'lte', 'isnull', 'in', 'range'],
+            "container" : ['exact'],
+            "batch": ['exact'],
+            "goods_code": ['exact', 'icontains'],
+            "goods_desc": ['exact', 'icontains'],
+            "goods_qty": ['exact', 'icontains'],
+            "goods_weight": ['exact', 'icontains'],
+            "status": ['exact', 'icontains'],
+            "creater": ['exact', 'icontains'],
+            "create_time": ['exact', 'gt', 'gte', 'lt', 'lte', 'range'],
+            "update_time": ['exact', 'gt', 'gte', 'lt', 'lte', 'range'],
+        }
+
+class ContainerOperationFilter(FilterSet):
+     class Meta:
+        model = ContainerOperationModel
+        fields = {
+            "id": ['exact', 'gt', 'gte', 'lt', 'lte', 'isnull', 'in', 'range'],
+            "month": ['exact', 'gt', 'gte', 'lt', 'lte', 'isnull', 'in', 'range'],
+            "container" : ['exact'],
+            "operation_type": ['exact', 'icontains'],
+
+            "batch": ['exact'],
+            "goods_code" : ['exact', 'icontains'],
+            "goods_desc": ['exact', 'icontains'],
+            "goods_qty": ['exact', 'icontains'],
+            "goods_weight": ['exact', 'icontains'],
+            
+            "operator": ['exact', 'icontains'],
+            "timestamp": ['exact', 'gt', 'gte', 'lt', 'lte', 'range'],
+            "from_location": ['exact', 'icontains'],
+            "to_location": ['exact', 'icontains'],
+            "memo": ['exact', 'icontains'],
+        }
+
+    

+ 80 - 0
container/migrations/0001_initial.py

@@ -0,0 +1,80 @@
+# Generated by Django 4.1.2 on 2025-03-29 13:32
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+        ('bound', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='ContainerListModel',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('container_code', models.IntegerField(verbose_name='托盘编号')),
+                ('current_location', models.CharField(default='N/A', max_length=50, verbose_name='当前库位')),
+                ('status', models.IntegerField(choices=[(0, '空置'), (1, '入库中'), (2, '在库'), (3, '出库中'), (4, '已出库')], default=0, verbose_name='托盘状态')),
+                ('last_operation', models.DateTimeField(auto_now=True, verbose_name='最后操作时间')),
+            ],
+            options={
+                'verbose_name': 'ContainerList',
+                'verbose_name_plural': 'ContainerList',
+                'db_table': 'container_list',
+                'ordering': ['-container_code'],
+            },
+        ),
+        migrations.CreateModel(
+            name='ContainerOperationModel',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('month', models.IntegerField(max_length=20, verbose_name='月份')),
+                ('operation_type', models.CharField(choices=[('inbound', '入库'), ('outbound', '出库')], max_length=20, verbose_name='操作类型')),
+                ('goods_code', models.CharField(max_length=50, verbose_name='货品编码')),
+                ('goods_desc', models.CharField(max_length=100, verbose_name='货品描述')),
+                ('goods_qty', models.IntegerField(verbose_name='数量')),
+                ('goods_weight', models.DecimalField(decimal_places=3, max_digits=10, verbose_name='重量')),
+                ('operator', models.CharField(max_length=50, verbose_name='操作人')),
+                ('timestamp', models.DateTimeField(auto_now_add=True, verbose_name='操作时间')),
+                ('from_location', models.CharField(max_length=50, null=True, verbose_name='原库位')),
+                ('to_location', models.CharField(max_length=50, null=True, verbose_name='目标库位')),
+                ('memo', models.TextField(null=True, verbose_name='备注')),
+                ('batch', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='bound.boundbatchmodel', verbose_name='批次')),
+                ('container', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='operations', to='container.containerlistmodel')),
+            ],
+            options={
+                'verbose_name': 'ContainerOperation',
+                'verbose_name_plural': 'ContainerOperation',
+                'db_table': 'container_operation',
+                'ordering': ['-timestamp'],
+            },
+        ),
+        migrations.CreateModel(
+            name='ContainerDetailModel',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('month', models.IntegerField(max_length=20, verbose_name='月份')),
+                ('goods_code', models.CharField(max_length=50, verbose_name='货品编码')),
+                ('goods_desc', models.CharField(max_length=100, verbose_name='货品描述')),
+                ('goods_qty', models.IntegerField(verbose_name='数量')),
+                ('goods_weight', models.DecimalField(decimal_places=3, max_digits=10, verbose_name='重量')),
+                ('status', models.IntegerField(default=1, verbose_name='状态')),
+                ('creater', models.CharField(max_length=50, verbose_name='创建人')),
+                ('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
+                ('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
+                ('batch', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='bound.boundbatchmodel', verbose_name='批次')),
+                ('container', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='details', to='container.containerlistmodel')),
+            ],
+            options={
+                'verbose_name': 'ContainerDetail',
+                'verbose_name_plural': 'ContainerDetail',
+                'db_table': 'container_detail',
+                'ordering': ['-id'],
+            },
+        ),
+    ]

+ 23 - 0
container/migrations/0002_alter_containerdetailmodel_month_and_more.py

@@ -0,0 +1,23 @@
+# Generated by Django 4.1.2 on 2025-03-29 13:33
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('container', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='containerdetailmodel',
+            name='month',
+            field=models.IntegerField(verbose_name='月份'),
+        ),
+        migrations.AlterField(
+            model_name='containeroperationmodel',
+            name='month',
+            field=models.IntegerField(verbose_name='月份'),
+        ),
+    ]

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


BIN
container/migrations/__pycache__/0002_alter_containerdetailmodel_month_and_more.cpython-38.pyc


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


+ 69 - 1
container/models.py

@@ -1,3 +1,71 @@
 from django.db import models
-
+from bound.models import BoundBatchModel
 # Create your models here.
+# 主表:托盘数据
+class ContainerListModel(models.Model):
+    CONTAINER_STATUS = (
+        (0, '空置'),
+        (1, '入库中'),
+        (2, '在库'),
+        (3, '出库中'),
+        (4, '已出库')
+    )
+   
+    container_code = models.IntegerField( verbose_name='托盘编号')
+    current_location = models.CharField(max_length=50, verbose_name='当前库位', default='N/A')
+    status = models.IntegerField(choices=CONTAINER_STATUS, default=0, verbose_name='托盘状态')
+    last_operation = models.DateTimeField(auto_now=True, verbose_name='最后操作时间')
+
+    class Meta:
+        db_table = 'container_list'
+        verbose_name = 'ContainerList'
+        verbose_name_plural = "ContainerList"
+        ordering = ['-container_code']
+
+# 明细表:托盘详细数据记录当前组盘的 批次 数量 使用托盘码和状态来获取、托盘上的物料信息,
+class ContainerDetailModel(models.Model):
+    month = models.IntegerField(verbose_name='月份')
+    container = models.ForeignKey(ContainerListModel, on_delete=models.CASCADE, related_name='details')
+    batch = models.ForeignKey(BoundBatchModel, on_delete=models.CASCADE, verbose_name='批次')
+    goods_code = models.CharField(max_length=50, verbose_name='货品编码')
+    goods_desc = models.CharField(max_length=100, verbose_name='货品描述')
+    goods_qty = models.IntegerField(verbose_name='数量')
+    goods_weight = models.DecimalField(max_digits=10, decimal_places=3, verbose_name='重量')
+    status = models.IntegerField(default=1, verbose_name='状态')           # 0: 未使用 1: 使用中 2: 已出库
+    creater = models.CharField(max_length=50, verbose_name='创建人')
+    create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
+    update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')
+
+    class Meta:
+        db_table = 'container_detail'
+        verbose_name = 'ContainerDetail'
+        verbose_name_plural = "ContainerDetail"
+        ordering = ['-id']
+
+# 明细表:操作记录 记录每次出入库的记录,使用goods来进行盘点,使用托盘码来进行托盘的操作记录
+class ContainerOperationModel(models.Model):
+    OPERATION_TYPES = (
+        ('inbound', '入库'),
+        ('outbound', '出库'), 
+    )
+    month = models.IntegerField(verbose_name='月份')
+    container = models.ForeignKey(ContainerListModel, on_delete=models.CASCADE, related_name='operations')
+    operation_type = models.CharField(max_length=20, choices=OPERATION_TYPES, verbose_name='操作类型')
+
+    batch = models.ForeignKey(BoundBatchModel, on_delete=models.CASCADE, verbose_name='批次')
+    goods_code = models.CharField(max_length=50, verbose_name='货品编码')
+    goods_desc = models.CharField(max_length=100, verbose_name='货品描述')
+    goods_qty = models.IntegerField(verbose_name='数量')
+    goods_weight = models.DecimalField(max_digits=10, decimal_places=3, verbose_name='重量')
+
+    operator = models.CharField(max_length=50, verbose_name='操作人')
+    timestamp = models.DateTimeField(auto_now_add=True, verbose_name='操作时间')    
+    from_location = models.CharField(max_length=50, null=True, verbose_name='原库位')
+    to_location = models.CharField(max_length=50, null=True, verbose_name='目标库位')
+    memo = models.TextField(null=True, verbose_name='备注')
+
+    class Meta:
+        db_table = 'container_operation'    
+        verbose_name = 'ContainerOperation'
+        verbose_name_plural = "ContainerOperation"
+        ordering = ['-timestamp']

+ 171 - 0
container/serializers.py

@@ -0,0 +1,171 @@
+from rest_framework import serializers
+
+from .models import ContainerListModel,ContainerDetailModel,ContainerOperationModel
+from bound.models import BoundBatchModel
+
+
+from utils import datasolve
+
+class ContainerListGetSerializer(serializers.ModelSerializer):
+    # 定义主单列表的序列化器,用于获取操作,字段只读
+    container_code = serializers.IntegerField(read_only=True, required=False)
+    current_location = serializers.CharField(read_only=True, required=False)
+    status = serializers.IntegerField(read_only=True, required=False)
+    last_operation = serializers.DateTimeField(read_only=True, format='%Y-%m-%d', required=False)
+
+    class Meta:
+        # 指定模型和排除字段
+        model = ContainerListModel
+        fields= '__all__'
+        read_only_fields = ['id']
+
+class ContainerListPostSerializer(serializers.ModelSerializer):
+    # 定义主单列表的序列化器,用于创建操作,允许部分字段写入
+    container_code = serializers.IntegerField(read_only=False, required=True, validators=[datasolve.data_validate])
+    current_location = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate])
+    status = serializers.IntegerField(read_only=False, required=False, validators=[datasolve.data_validate])
+    last_operation = serializers.DateTimeField(read_only=False, format='%Y-%m-%d', required=False, validators=[datasolve.data_validate])
+
+
+    class Meta:
+        # 指定模型和排除字段
+        model = ContainerListModel
+        fields= '__all__'
+        read_only_fields = ['id' ]
+
+class ContainerDetailGetSerializer(serializers.ModelSerializer):
+    # 定义明细单列表的序列化器,用于获取操作,字段只读
+    month = serializers.IntegerField(read_only=True, required=False)
+    container = serializers.SerializerMethodField()
+    batch = serializers.SerializerMethodField()
+    goods_code = serializers.CharField(read_only=True, required=False)
+    goods_desc = serializers.CharField(read_only=True, required=False)
+    goods_qty = serializers.IntegerField(read_only=True, required=False)
+    goods_weight = serializers.DecimalField(read_only=True, required=False, max_digits=10, decimal_places=2)
+    status = serializers.IntegerField(read_only=True, required=False)
+    creater = serializers.CharField(read_only=True, required=False)
+    create_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M', required=False)
+    update_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M', required=False)
+
+    def get_container_code(self, obj):
+        """ 动态序列化关联的主单数据 """
+        from .serializers import ContainerListGetSerializer
+        return ContainerListGetSerializer(obj.container_list).data
+
+    def get_batch(self, obj):
+        """ 动态序列化关联的批次数据 """
+        from bound.serializers import BoundBatchGetSerializer
+        return BoundBatchGetSerializer(obj.bound_batch).data
+
+    class Meta:
+        # 指定模型和排除字段
+        model = ContainerDetailModel
+        fields= '__all__'
+        read_only_fields = ['id']
+    
+class ContainerDetailPostSerializer(serializers.ModelSerializer):
+    # 定义明细单列表的序列化器,用于创建操作,允许部分字段写入
+    month = serializers.IntegerField(read_only=False, required=False, validators=[datasolve.data_validate])
+    container = serializers.PrimaryKeyRelatedField(queryset=ContainerListModel.objects.all(),
+    help_text='关联的主单',
+    error_messages = {
+        'null': '请选择关联的主单',
+        'does_not_exist': '关联的主单不存在',
+        'incorrect_type': '关联的主单格式错误'
+    },
+    required=False, validators=[datasolve.data_validate])
+    batch = serializers.PrimaryKeyRelatedField(queryset=BoundBatchModel.objects.all(),
+    help_text='关联的批次',
+    error_messages = {
+        'null': '请选择关联的批次',
+        'does_not_exist': '关联的批次不存在',
+        'incorrect_type': '关联的批次格式错误'
+    },
+    required=False, validators=[datasolve.data_validate])
+    goods_code = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])
+    goods_desc = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])
+    goods_qty = serializers.IntegerField(read_only=False, required=True, validators=[datasolve.data_validate])
+    goods_weight = serializers.DecimalField(read_only=False, required=True, max_digits=10, decimal_places=2, validators=[datasolve.data_validate])
+    status = serializers.IntegerField(read_only=False, required=False, validators=[datasolve.data_validate])
+    creater = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate])
+    create_time = serializers.DateTimeField(read_only=False, format='%Y-%m-%d %H:%M', required=False, validators=[datasolve.data_validate])
+    update_time = serializers.DateTimeField(read_only=False, format='%Y-%m-%d %H:%M', required=False, validators=[datasolve.data_validate])
+
+    class Meta:
+        # 指定模型和排除字段
+        model = ContainerDetailModel
+        fields= '__all__'
+        read_only_fields = ['id']
+
+class ContainerOperationGetSerializer(serializers.ModelSerializer):
+    # 定义操作记录的序列化器,用于获取操作,字段只读
+    month = serializers.IntegerField(read_only=True, required=False)
+    container = serializers.SerializerMethodField()
+    operation_type = serializers.CharField(read_only=True, required=False)
+
+    batch = serializers.SerializerMethodField()
+    goods_code = serializers.CharField(read_only=True, required=False)
+    goods_desc = serializers.CharField(read_only=True, required=False)
+    goods_qty = serializers.IntegerField(read_only=True, required=False)
+    goods_weight = serializers.DecimalField(read_only=True, required=False, max_digits=10, decimal_places=2)
+
+    operator = serializers.CharField(read_only=True, required=False)
+    timestamp = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M', required=False)
+    from_location = serializers.CharField(read_only=True, required=False)
+    to_location = serializers.CharField(read_only=True, required=False)
+    memo = serializers.CharField(read_only=True, required=False)
+    def get_container_code(self, obj):
+        """ 动态序列化关联的主单数据 """
+        from .serializers import ContainerListGetSerializer
+        return ContainerListGetSerializer(obj.container_list).data
+
+    def get_batch(self, obj):
+        """ 动态序列化关联的批次数据 """
+        from bound.serializers import BoundBatchGetSerializer
+        return BoundBatchGetSerializer(obj.bound_batch).data
+
+    class Meta:
+        # 指定模型和排除字段
+        model = ContainerOperationModel
+        fields= '__all__'
+        read_only_fields = ['id']
+
+class ContainerOperationPostSerializer(serializers.ModelSerializer):
+    # 定义操作记录的序列化器,用于创建操作,允许部分字段写入
+    month = serializers.IntegerField(read_only=False, required=False, validators=[datasolve.data_validate])
+    container = serializers.PrimaryKeyRelatedField(queryset=ContainerListModel.objects.all(),
+    help_text='关联的主单',
+    error_messages = {
+        'null': '请选择关联的主单',
+        'does_not_exist': '关联的主单不存在',
+        'incorrect_type': '关联的主单格式错误'
+    },
+    required=True, validators=[datasolve.data_validate])
+    operation_type = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])
+
+    batch = serializers.PrimaryKeyRelatedField(queryset=BoundBatchModel.objects.all(),
+    help_text='关联的批次',
+    error_messages = {
+        'null': '请选择关联的批次',
+        'does_not_exist': '关联的批次不存在',
+        'incorrect_type': '关联的批次格式错误'
+    },
+    required=True, validators=[datasolve.data_validate])
+    goods_code = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])
+    goods_desc = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])
+    goods_qty = serializers.IntegerField(read_only=False, required=True, validators=[datasolve.data_validate])
+    goods_weight = serializers.DecimalField(read_only=False, required=True, max_digits=10, decimal_places=2, validators=[datasolve.data_validate])
+
+    operator = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])
+    timestamp = serializers.DateTimeField(read_only=False, format='%Y-%m-%d %H:%M', required=True, validators=[datasolve.data_validate])
+    from_location = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])
+    to_location = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])
+    memo = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate])
+
+    class Meta:
+        # 指定模型和排除字段
+        model = ContainerOperationModel
+        fields= '__all__'
+        read_only_fields = ['id']
+
+

+ 19 - 0
container/urls.py

@@ -0,0 +1,19 @@
+from django.urls import path, re_path
+from . import views
+
+urlpatterns = [
+path(r'list/', views.ContainerListViewSet.as_view({"get": "list", "post": "create"}), name="ContainerList"),
+re_path(r'^list/(?P<pk>\d+)/$', views.ContainerListViewSet.as_view({
+    'get': 'retrieve',
+    'put': 'update',
+    'patch': 'partial_update',
+}), name="ContainerList_1"),
+
+path(r'detail/', views.ContainerDetailViewSet.as_view( {"get": "retrieve","post": "create"}), name="ContainerDetail"),
+re_path(r'^detail/(?P<pk>\d+)/$', views.ContainerDetailViewSet.as_view({
+    'get': 'retrieve',
+    'put': 'update',
+    'patch': 'partial_update',
+}), name="ContainerDetail_1"),
+
+]

+ 326 - 2
container/views.py

@@ -1,3 +1,327 @@
-from django.shortcuts import render
+from rest_framework import viewsets
+from utils.page import MyPageNumberPagination
+from utils.datasolve import sumOfList, transportation_calculate
+from utils.md5 import Md5
+from rest_framework.filters import OrderingFilter
+from django_filters.rest_framework import DjangoFilterBackend
+from rest_framework.response import Response
+from rest_framework.exceptions import APIException
+from django.utils import timezone
 
-# Create your views here.
+
+from .models import ContainerListModel,ContainerDetailModel,ContainerOperationModel
+from bound.models import BoundBatchModel,BoundDetailModel,BoundListModel
+
+# from .files import FileListRenderCN, FileDetailRenderCN
+
+from .serializers import ContainerDetailGetSerializer,ContainerDetailPostSerializer
+from .serializers import ContainerListGetSerializer,ContainerListPostSerializer
+from .serializers import ContainerOperationGetSerializer,ContainerOperationPostSerializer
+from .filter import ContainerDetailFilter,ContainerListFilter,ContainerOperationFilter
+# 以后添加模
+from warehouse.models import ListModel as warehouse
+from staff.models import ListModel as staff
+from rest_framework.permissions import AllowAny
+
+class ContainerListViewSet(viewsets.ModelViewSet):
+    """
+        retrieve:
+            Response a data list(get)
+        list:
+            Response a data list(all)
+        create:
+            Create a data line(post)
+
+        delete:
+            Delete a data line(delete)
+
+    """
+    # authentication_classes = []  # 禁用所有认证类
+    # permission_classes = [AllowAny]  # 允许任意访问
+    
+    pagination_class = MyPageNumberPagination   
+    filter_backends = [DjangoFilterBackend, OrderingFilter, ]
+    ordering_fields = ['id', "create_time", "update_time", ]
+    filter_class = ContainerListFilter
+
+    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 ContainerListModel.objects.filter( is_delete=False)
+            else:
+                return ContainerListModel.objects.filter( id=id, is_delete=False)
+        else:
+            return ContainerListModel.objects.none()
+
+
+    def get_serializer_class(self):
+        if self.action in ['list', 'destroy','retrieve']:
+            return ContainerListGetSerializer
+        elif self.action in ['create', 'update']:
+            return ContainerListPostSerializer
+        else:
+            return self.http_method_not_allowed(request=self.request)
+
+    def create(self, request, *args, **kwargs):
+        data = self.request.data
+        order_month = str(timezone.now().strftime('%Y%m'))
+        data['month'] = order_month
+        data['last_operate'] = str(timezone.now())
+        
+        serializer = self.get_serializer(data=data)
+        serializer.is_valid(raise_exception=True)
+        serializer.save()
+
+        headers = self.get_success_headers(serializer.data)
+        return Response(serializer.data, status=200, headers=headers)
+    
+    def update(self, request, pk):
+        qs = self.get_object()
+        data = self.request.data
+        serializer = self.get_serializer(qs, data=data)
+        serializer.is_valid(raise_exception=True)
+        serializer.save()
+        headers = self.get_success_headers(serializer.data)
+        return Response(serializer.data, status=200, headers=headers)
+
+class ContainerDetailViewSet(viewsets.ModelViewSet):
+    """
+        retrieve:
+            Response a data list(get)
+            list:
+            Response a data list(all)
+        create:
+            Create a data line(post)
+
+        delete:
+            Delete a data line(delete)
+
+    """
+    # authentication_classes = []  # 禁用所有认证类
+    # permission_classes = [AllowAny]  # 允许任意访问
+    
+    pagination_class = MyPageNumberPagination   
+    filter_backends = [DjangoFilterBackend, OrderingFilter, ]
+    ordering_fields = ['id', "create_time", "update_time", ]
+    filter_class = ContainerDetailFilter
+
+    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 ContainerDetailModel.objects.filter( is_delete=False)
+            else:
+                return ContainerDetailModel.objects.filter( id=id, is_delete=False)
+        else:
+            return ContainerDetailModel.objects.none()
+
+
+    def get_serializer_class(self):
+        if self.action in ['list', 'destroy','retrieve']:
+            return ContainerDetailGetSerializer
+        elif self.action in ['create', 'update']:
+            return ContainerDetailPostSerializer
+        else:
+            return self.http_method_not_allowed(request=self.request)
+
+    def create(self, request, *args, **kwargs):
+        data = self.request.data 
+        order_month = str(timezone.now().strftime('%Y%m'))
+        data['month'] = order_month
+        container_code = data.get('container')
+        batches = data.get('batches', [])  # 确保有默认空列表
+        print('扫描到的托盘编码', container_code)
+        
+        # 处理托盘对象
+        container_obj = ContainerListModel.objects.filter(container_code=container_code).first()
+        if container_obj:
+            data['container'] = container_obj.id
+            print('托盘编码存在', data['container'])
+        else:
+            print('托盘编码不存在')
+            serializer_list = ContainerListPostSerializer(data={'container_code': container_code})
+            serializer_list.is_valid(raise_exception=True)
+            serializer_list.save()
+            data['container'] = serializer_list.data.get('id')
+        
+        # 循环处理每个批次
+        for batch in batches:
+            bound_number = batch.get('goods_code')
+            goods_qty = batch.get('goods_qty')
+            
+            # 查询商品对象
+            bound_obj = BoundBatchModel.objects.filter(bound_number=bound_number).first()
+
+            if not bound_obj:
+                # 如果商品不存在,返回错误,这里暂时在程序中进行提醒,后续需要改为前端弹窗提醒
+                print(f"商品编码 {bound_number} 不存在")
+                # 跳出此次循环
+                continue
+                # return Response({"error": f"商品编码 {bound_number} 不存在"}, status=400)
+            # 3. 更新批次数据(根据业务规则)
+            try:
+                last_qty = bound_obj.goods_in_qty
+                bound_obj.goods_in_qty += batch.get("goods_qty", 0)
+                if bound_obj.goods_in_qty >= bound_obj.goods_qty:
+                    bound_obj.goods_in_qty = bound_obj.goods_qty
+                    bound_obj.status = 2 
+                    print('批次id',bound_obj.id) 
+                    bound_detail_obj = BoundDetailModel.objects.filter(bound_batch=bound_obj.id).first()
+                    if bound_detail_obj:
+                        bound_detail_obj.status = 2
+                        bound_detail_obj.save()
+                        print('入库申请id',bound_detail_obj.bound_list_id)
+                        # 入库申请全部批次入库完成
+                        bound_batch_all = BoundDetailModel.objects.filter(bound_list=bound_detail_obj.bound_list_id).all()
+                        if bound_batch_all.count() == bound_batch_all.filter(status=2).count():
+                            bound_list_obj = BoundListModel.objects.filter(id=bound_detail_obj.bound_list_id).first()
+                            print('当前状态',bound_list_obj.bound_status)
+                            bound_list_obj.bound_status = 102
+                            print('更新状态',bound_list_obj.bound_status)
+                            bound_list_obj.save()
+                            print('入库申请全部批次入库完成')
+                        else:
+                            print('入库申请部分批次入库完成')
+                else:
+                    bound_obj.status = 1
+                
+                bound_obj.save()  # 保存到数据库
+                # 创建托盘详情记录(每个批次独立)
+                print('新增个数',bound_obj.goods_in_qty-last_qty)
+                if bound_obj.goods_in_qty-last_qty == goods_qty:
+                    detail_data = {
+                        "container": data['container'],  # 托盘ID
+                        "batch": bound_obj.id,  # 外键关联批次
+                        "goods_code": bound_obj.goods_code,
+                        "goods_desc": bound_obj.goods_desc,
+                        "goods_qty": goods_qty,
+                        "goods_weight": bound_obj.goods_weight,
+                        "status": 1,
+                        "month": data['month'],
+                        "creater": data.get('creater', 'zl')  # 默认值兜底
+                    }
+                    serializer = self.get_serializer(data=detail_data)
+                    serializer.is_valid(raise_exception=True)
+                    serializer.save()  # 必须保存到数据库
+
+                elif bound_obj.goods_in_qty-last_qty > 0:
+                    print('批次数量不一致')
+                    detail_data = {
+                        "container": data['container'],  # 托盘ID
+                        "batch": bound_obj.id,  # 外键关联批次
+                        "goods_code": bound_obj.goods_code,
+                        "goods_desc": bound_obj.goods_desc,
+                        "goods_qty": bound_obj.goods_in_qty-last_qty,
+                        "goods_weight": bound_obj.goods_weight,
+                        "status": 1,
+                        "month": data['month'],
+                        "creater": data.get('creater', 'zl')  # 默认值兜底
+                    }
+                    serializer = self.get_serializer(data=detail_data)
+                    serializer.is_valid(raise_exception=True)
+                    serializer.save()  # 必须保存到数据库
+                else :
+                    print('重复入库')
+                
+
+            except Exception as e:
+                print(f"更新批次 {bound_number} 失败: {str(e)}")
+                continue
+
+        # 将处理后的数据返回(或根据业务需求保存到数据库)
+        res_data={
+            	"code": "200",
+                "msg": "Success Create",
+                "data": data
+        }
+        return Response(res_data, status=200)
+
+    def update(self, request, pk):
+        qs = self.get_object()
+        data = self.request.data
+        serializer = self.get_serializer(qs, data=data)
+        serializer.is_valid(raise_exception=True)
+        serializer.save()
+        headers = self.get_success_headers(serializer.data)
+        return Response(serializer.data, status=200, headers=headers)
+
+class ContainerOperationViewSet(viewsets.ModelViewSet):
+    """
+        retrieve:
+            Response a data list(get)
+            list:
+            Response a data list(all)
+        create:
+            Create a data line(post)
+
+        delete:
+            Delete a data line(delete)
+
+    """
+    # authentication_classes = []  # 禁用所有认证类
+    # permission_classes = [AllowAny]  # 允许任意访问
+    
+    pagination_class = MyPageNumberPagination   
+    filter_backends = [DjangoFilterBackend, OrderingFilter, ]
+    ordering_fields = ['id', "create_time", "update_time", ]
+    filter_class = ContainerOperationFilter
+
+    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 ContainerOperationModel.objects.filter( is_delete=False)
+            else:
+                return ContainerOperationModel.objects.filter( id=id, is_delete=False)
+        else:
+            return ContainerOperationModel.objects.none()
+
+
+    def get_serializer_class(self):
+        if self.action in ['list', 'destroy','retrieve']:
+            return ContainerOperationGetSerializer
+        elif self.action in ['create', 'update']:
+            return ContainerOperationPostSerializer
+        else:
+            return self.http_method_not_allowed(request=self.request)
+
+    def create(self, request, *args, **kwargs):
+        data = self.request.data
+        serializer = self.get_serializer(data=data)
+        serializer.is_valid(raise_exception=True)
+        serializer.save()
+        headers = self.get_success_headers(serializer.data)
+        return Response(serializer.data, status=200, headers=headers)
+    
+    def update(self, request, pk):
+        qs = self.get_object()
+        data = self.request.data
+        serializer = self.get_serializer(qs, data=data)
+        serializer.is_valid(raise_exception=True)
+        serializer.save()
+        headers = self.get_success_headers(serializer.data)
+        return Response(serializer.data, status=200, headers=headers)
+    
+            


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


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


+ 1 - 0
greaterwms/settings.py

@@ -38,6 +38,7 @@ INSTALLED_APPS = [
     'reportcenter.apps.ReportcenterConfig',
     # 'asn.apps.AsnConfig',
     'bound.apps.BoundConfig',
+    'container.apps.ContainerConfig',
 
     'throttle.apps.ThrottleConfig',
     'rest_framework',

+ 1 - 0
greaterwms/urls.py

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

+ 669 - 0
logs/error.log

@@ -0,0 +1,669 @@
+[2025-03-29 13:45:16,970][django.request.log_response():241] [ERROR] Internal Server Error: /container/detail/
+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\rest_framework\viewsets.py", line 125, 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\.\container\views.py", line 144, in create
+    data['month'] = order_month
+TypeError: 'Request' object does not support item assignment
+[2025-03-29 13:45:37,196][django.request.log_response():241] [ERROR] Internal Server Error: /container/detail/
+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\rest_framework\viewsets.py", line 125, 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\.\container\views.py", line 144, in create
+    data['month'] = order_month
+TypeError: 'Request' object does not support item assignment
+[2025-03-29 13:50:54,126][django.request.log_response():241] [ERROR] Internal Server Error: /container/detail/
+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\rest_framework\viewsets.py", line 125, 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\.\container\views.py", line 142, in create
+    data = self.request()
+TypeError: 'Request' object is not callable
+[2025-03-29 13:55:31,146][django.request.log_response():241] [ERROR] Internal Server Error: /container/detail/
+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\rest_framework\viewsets.py", line 125, 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\.\container\views.py", line 153, in create
+    container_list[container_code] =container_code
+NameError: name 'container_list' is not defined
+[2025-03-29 13:57:12,542][django.request.log_response():241] [ERROR] Internal Server Error: /container/detail/
+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\rest_framework\viewsets.py", line 125, 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\.\container\views.py", line 147, in create
+    container_list[container_code] =container_code
+NameError: name 'container_list' is not defined
+[2025-03-29 13:57:52,679][django.request.log_response():241] [ERROR] Internal Server Error: /container/detail/
+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\rest_framework\viewsets.py", line 125, 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\.\container\views.py", line 147, in create
+    container_list['container_code'] =container_code
+NameError: name 'container_list' is not defined
+[2025-03-29 13:58:55,329][django.request.log_response():241] [ERROR] Internal Server Error: /container/detail/
+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\rest_framework\viewsets.py", line 125, 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\.\container\views.py", line 147, in create
+    container_list['container_code'] =container_code
+NameError: name 'container_list' is not defined
+[2025-03-29 13:59:33,778][django.request.log_response():241] [ERROR] Internal Server Error: /container/detail/
+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\rest_framework\viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 511, in dispatch
+    self.response = self.finalize_response(request, response, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 423, in finalize_response
+    assert isinstance(response, HttpResponseBase), (
+AssertionError: Expected a `Response`, `HttpResponse` or `HttpStreamingResponse` to be returned from the view, but received a `<class 'NoneType'>`
+[2025-03-29 14:01:48,885][django.request.log_response():241] [ERROR] Internal Server Error: /container/detail/
+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\rest_framework\viewsets.py", line 125, 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\.\container\views.py", line 161, in create
+    return Response(serializer_list.data, status=200)
+UnboundLocalError: local variable 'serializer_list' referenced before assignment
+[2025-03-29 15:09:58,952][django.request.log_response():241] [ERROR] Internal Server Error: /container/detail/
+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\rest_framework\viewsets.py", line 125, 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\.\container\views.py", line 156, in create
+    print('托盘编码存在', data['container_id'])
+KeyError: 'container_id'
+[2025-03-29 15:12:23,059][django.request.log_response():241] [ERROR] Internal Server Error: /container/detail/
+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\rest_framework\viewsets.py", line 125, 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\.\container\views.py", line 178, in create
+    batch = bound_batch
+NameError: name 'bound_batch' is not defined
+[2025-03-29 15:57:04,351][django.request.log_response():241] [ERROR] Internal Server Error: /bound/detail/
+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\rest_framework\viewsets.py", line 125, 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:\language\python38\lib\site-packages\rest_framework\mixins.py", line 43, in list
+    return self.get_paginated_response(serializer.data)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 768, in data
+    ret = super().data
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 253, in data
+    self._data = self.to_representation(self.instance)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 686, in to_representation
+    return [
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 687, in <listcomp>
+    self.child.to_representation(item) for item in iterable
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 507, in to_representation
+    for field in fields:
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 368, in _readable_fields
+    for field in self.fields.values():
+  File "d:\language\python38\lib\site-packages\django\utils\functional.py", line 57, in __get__
+    res = instance.__dict__[self.name] = self.func(instance)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 356, in fields
+    for key, value in self.get_fields().items():
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 1052, in get_fields
+    field_names = self.get_field_names(declared_fields, info)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 1148, in get_field_names
+    assert field_name in fields, (
+AssertionError: The field 'status' was declared on serializer BoundDetailGetSerializer, but has not been included in the 'fields' option.
+[2025-03-29 16:01:18,131][django.request.log_response():241] [ERROR] Internal Server Error: /container/detail/
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\language\python38\lib\site-packages\django\db\backends\sqlite3\base.py", line 357, in execute
+    return Database.Cursor.execute(self, query, params)
+sqlite3.IntegrityError: NOT NULL constraint failed: container_detail.batch_id
+
+The above exception was the direct cause of the following exception:
+
+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\rest_framework\viewsets.py", line 125, 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\.\container\views.py", line 218, in create
+    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 962, in create
+    instance = ModelClass._default_manager.create(**validated_data)
+  File "d:\language\python38\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
+    return getattr(self.get_queryset(), name)(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\db\models\query.py", line 671, in create
+    obj.save(force_insert=True, using=self.db)
+  File "d:\language\python38\lib\site-packages\django\db\models\base.py", line 812, in save
+    self.save_base(
+  File "d:\language\python38\lib\site-packages\django\db\models\base.py", line 863, in save_base
+    updated = self._save_table(
+  File "d:\language\python38\lib\site-packages\django\db\models\base.py", line 1006, in _save_table
+    results = self._do_insert(
+  File "d:\language\python38\lib\site-packages\django\db\models\base.py", line 1047, in _do_insert
+    return manager._insert(
+  File "d:\language\python38\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
+    return getattr(self.get_queryset(), name)(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\db\models\query.py", line 1790, in _insert
+    return query.get_compiler(using=using).execute_sql(returning_fields)
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\compiler.py", line 1660, in execute_sql
+    cursor.execute(sql, params)
+  File "d:\language\python38\lib\site-packages\django\db\backends\utils.py", line 103, in execute
+    return super().execute(sql, params)
+  File "d:\language\python38\lib\site-packages\django\db\backends\utils.py", line 67, in execute
+    return self._execute_with_wrappers(
+  File "d:\language\python38\lib\site-packages\django\db\backends\utils.py", line 80, in _execute_with_wrappers
+    return executor(sql, params, many, context)
+  File "d:\language\python38\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\language\python38\lib\site-packages\django\db\utils.py", line 91, in __exit__
+    raise dj_exc_value.with_traceback(traceback) from exc_value
+  File "d:\language\python38\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\language\python38\lib\site-packages\django\db\backends\sqlite3\base.py", line 357, in execute
+    return Database.Cursor.execute(self, query, params)
+django.db.utils.IntegrityError: NOT NULL constraint failed: container_detail.batch_id
+[2025-03-29 16:11:38,989][django.request.log_response():241] [ERROR] Internal Server Error: /container/detail/
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\django\db\models\fields\__init__.py", line 2018, in get_prep_value
+    return int(value)
+TypeError: int() argument must be a string, a bytes-like object or a number, not 'BoundListModel'
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+  File "D:\Document\code\vue\greater_wms\.\container\views.py", line 192, in create
+    bound_list_obj = BoundListModel.objects.filter(id=bound_detail_obj.bound_list).first()
+  File "d:\language\python38\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
+    return getattr(self.get_queryset(), name)(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\db\models\query.py", line 1420, in filter
+    return self._filter_or_exclude(False, args, kwargs)
+  File "d:\language\python38\lib\site-packages\django\db\models\query.py", line 1438, in _filter_or_exclude
+    clone._filter_or_exclude_inplace(negate, args, kwargs)
+  File "d:\language\python38\lib\site-packages\django\db\models\query.py", line 1445, in _filter_or_exclude_inplace
+    self._query.add_q(Q(*args, **kwargs))
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\query.py", line 1532, in add_q
+    clause, _ = self._add_q(q_object, self.used_aliases)
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\query.py", line 1562, in _add_q
+    child_clause, needed_inner = self.build_filter(
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\query.py", line 1478, in build_filter
+    condition = self.build_lookup(lookups, col, value)
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\query.py", line 1303, in build_lookup
+    lookup = lookup_class(lhs, rhs)
+  File "d:\language\python38\lib\site-packages\django\db\models\lookups.py", line 27, in __init__
+    self.rhs = self.get_prep_lookup()
+  File "d:\language\python38\lib\site-packages\django\db\models\lookups.py", line 341, in get_prep_lookup
+    return super().get_prep_lookup()
+  File "d:\language\python38\lib\site-packages\django\db\models\lookups.py", line 85, in get_prep_lookup
+    return self.lhs.output_field.get_prep_value(self.rhs)
+  File "d:\language\python38\lib\site-packages\django\db\models\fields\__init__.py", line 2020, in get_prep_value
+    raise e.__class__(
+TypeError: Field 'id' expected a number but got <BoundListModel: BoundListModel object (1)>.
+
+During handling of the above exception, another exception occurred:
+
+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\rest_framework\viewsets.py", line 125, 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\.\container\views.py", line 204, in create
+    print(f"更新批次 {goods_code} 失败: {str(e)}")
+NameError: name 'goods_code' is not defined
+[2025-03-29 16:13:20,414][django.request.log_response():241] [ERROR] Internal Server Error: /container/detail/
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\django\db\models\fields\__init__.py", line 2018, in get_prep_value
+    return int(value)
+TypeError: int() argument must be a string, a bytes-like object or a number, not 'BoundListModel'
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+  File "D:\Document\code\vue\greater_wms\.\container\views.py", line 192, in create
+    bound_list_obj = BoundListModel.objects.filter(id=bound_detail_obj.bound_list).first()
+  File "d:\language\python38\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
+    return getattr(self.get_queryset(), name)(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\db\models\query.py", line 1420, in filter
+    return self._filter_or_exclude(False, args, kwargs)
+  File "d:\language\python38\lib\site-packages\django\db\models\query.py", line 1438, in _filter_or_exclude
+    clone._filter_or_exclude_inplace(negate, args, kwargs)
+  File "d:\language\python38\lib\site-packages\django\db\models\query.py", line 1445, in _filter_or_exclude_inplace
+    self._query.add_q(Q(*args, **kwargs))
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\query.py", line 1532, in add_q
+    clause, _ = self._add_q(q_object, self.used_aliases)
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\query.py", line 1562, in _add_q
+    child_clause, needed_inner = self.build_filter(
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\query.py", line 1478, in build_filter
+    condition = self.build_lookup(lookups, col, value)
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\query.py", line 1303, in build_lookup
+    lookup = lookup_class(lhs, rhs)
+  File "d:\language\python38\lib\site-packages\django\db\models\lookups.py", line 27, in __init__
+    self.rhs = self.get_prep_lookup()
+  File "d:\language\python38\lib\site-packages\django\db\models\lookups.py", line 341, in get_prep_lookup
+    return super().get_prep_lookup()
+  File "d:\language\python38\lib\site-packages\django\db\models\lookups.py", line 85, in get_prep_lookup
+    return self.lhs.output_field.get_prep_value(self.rhs)
+  File "d:\language\python38\lib\site-packages\django\db\models\fields\__init__.py", line 2020, in get_prep_value
+    raise e.__class__(
+TypeError: Field 'id' expected a number but got <BoundListModel: BoundListModel object (1)>.
+
+During handling of the above exception, another exception occurred:
+
+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\rest_framework\viewsets.py", line 125, 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\.\container\views.py", line 204, in create
+    continue
+NameError: name 'goods_code' is not defined
+[2025-03-29 16:13:39,379][django.request.log_response():241] [ERROR] Internal Server Error: /container/detail/
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\django\db\models\fields\__init__.py", line 2018, in get_prep_value
+    return int(value)
+TypeError: int() argument must be a string, a bytes-like object or a number, not 'BoundListModel'
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+  File "D:\Document\code\vue\greater_wms\.\container\views.py", line 192, in create
+    bound_list_obj = BoundListModel.objects.filter(id=bound_detail_obj.bound_list).first()
+  File "d:\language\python38\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
+    return getattr(self.get_queryset(), name)(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\db\models\query.py", line 1420, in filter
+    return self._filter_or_exclude(False, args, kwargs)
+  File "d:\language\python38\lib\site-packages\django\db\models\query.py", line 1438, in _filter_or_exclude
+    clone._filter_or_exclude_inplace(negate, args, kwargs)
+  File "d:\language\python38\lib\site-packages\django\db\models\query.py", line 1445, in _filter_or_exclude_inplace
+    self._query.add_q(Q(*args, **kwargs))
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\query.py", line 1532, in add_q
+    clause, _ = self._add_q(q_object, self.used_aliases)
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\query.py", line 1562, in _add_q
+    child_clause, needed_inner = self.build_filter(
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\query.py", line 1478, in build_filter
+    condition = self.build_lookup(lookups, col, value)
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\query.py", line 1303, in build_lookup
+    lookup = lookup_class(lhs, rhs)
+  File "d:\language\python38\lib\site-packages\django\db\models\lookups.py", line 27, in __init__
+    self.rhs = self.get_prep_lookup()
+  File "d:\language\python38\lib\site-packages\django\db\models\lookups.py", line 341, in get_prep_lookup
+    return super().get_prep_lookup()
+  File "d:\language\python38\lib\site-packages\django\db\models\lookups.py", line 85, in get_prep_lookup
+    return self.lhs.output_field.get_prep_value(self.rhs)
+  File "d:\language\python38\lib\site-packages\django\db\models\fields\__init__.py", line 2020, in get_prep_value
+    raise e.__class__(
+TypeError: Field 'id' expected a number but got <BoundListModel: BoundListModel object (1)>.
+
+During handling of the above exception, another exception occurred:
+
+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\rest_framework\viewsets.py", line 125, 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\.\container\views.py", line 204, in create
+    continue
+NameError: name 'goods_code' is not defined

+ 693 - 0
logs/server.log

@@ -1 +1,694 @@
 [2025-03-28 13:56:33,119][django.request.log_response():241] [WARNING] Not Found: /asn/list/
+[2025-03-28 17:01:41,239][django.request.log_response():241] [WARNING] Not Found: /goods/
+[2025-03-28 17:06:55,206][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-28 17:07:39,207][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-28 17:07:45,254][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-28 17:07:51,397][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-28 17:07:55,148][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-28 17:08:00,319][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-28 17:08:07,187][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-28 17:11:30,971][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-28 17:18:33,380][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-28 17:36:25,776][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-28 17:36:50,708][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-28 17:37:58,219][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-28 17:39:09,510][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-28 17:39:20,169][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-28 17:41:51,890][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/
+[2025-03-29 09:54:18,371][django.request.log_response():241] [WARNING] Not Found: /asn/list/
+[2025-03-29 11:23:22,482][django.security.SuspiciousSession.decode():108] [WARNING] Session data corrupted
+[2025-03-29 11:34:45,370][django.request.log_response():241] [WARNING] Not Found: /container/detail/
+[2025-03-29 13:45:16,970][django.request.log_response():241] [ERROR] Internal Server Error: /container/detail/
+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\rest_framework\viewsets.py", line 125, 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\.\container\views.py", line 144, in create
+    data['month'] = order_month
+TypeError: 'Request' object does not support item assignment
+[2025-03-29 13:45:37,196][django.request.log_response():241] [ERROR] Internal Server Error: /container/detail/
+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\rest_framework\viewsets.py", line 125, 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\.\container\views.py", line 144, in create
+    data['month'] = order_month
+TypeError: 'Request' object does not support item assignment
+[2025-03-29 13:50:54,126][django.request.log_response():241] [ERROR] Internal Server Error: /container/detail/
+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\rest_framework\viewsets.py", line 125, 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\.\container\views.py", line 142, in create
+    data = self.request()
+TypeError: 'Request' object is not callable
+[2025-03-29 13:55:31,146][django.request.log_response():241] [ERROR] Internal Server Error: /container/detail/
+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\rest_framework\viewsets.py", line 125, 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\.\container\views.py", line 153, in create
+    container_list[container_code] =container_code
+NameError: name 'container_list' is not defined
+[2025-03-29 13:57:12,542][django.request.log_response():241] [ERROR] Internal Server Error: /container/detail/
+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\rest_framework\viewsets.py", line 125, 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\.\container\views.py", line 147, in create
+    container_list[container_code] =container_code
+NameError: name 'container_list' is not defined
+[2025-03-29 13:57:52,679][django.request.log_response():241] [ERROR] Internal Server Error: /container/detail/
+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\rest_framework\viewsets.py", line 125, 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\.\container\views.py", line 147, in create
+    container_list['container_code'] =container_code
+NameError: name 'container_list' is not defined
+[2025-03-29 13:58:55,329][django.request.log_response():241] [ERROR] Internal Server Error: /container/detail/
+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\rest_framework\viewsets.py", line 125, 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\.\container\views.py", line 147, in create
+    container_list['container_code'] =container_code
+NameError: name 'container_list' is not defined
+[2025-03-29 13:59:33,778][django.request.log_response():241] [ERROR] Internal Server Error: /container/detail/
+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\rest_framework\viewsets.py", line 125, in view
+    return self.dispatch(request, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 511, in dispatch
+    self.response = self.finalize_response(request, response, *args, **kwargs)
+  File "d:\language\python38\lib\site-packages\rest_framework\views.py", line 423, in finalize_response
+    assert isinstance(response, HttpResponseBase), (
+AssertionError: Expected a `Response`, `HttpResponse` or `HttpStreamingResponse` to be returned from the view, but received a `<class 'NoneType'>`
+[2025-03-29 14:01:48,885][django.request.log_response():241] [ERROR] Internal Server Error: /container/detail/
+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\rest_framework\viewsets.py", line 125, 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\.\container\views.py", line 161, in create
+    return Response(serializer_list.data, status=200)
+UnboundLocalError: local variable 'serializer_list' referenced before assignment
+[2025-03-29 15:09:58,952][django.request.log_response():241] [ERROR] Internal Server Error: /container/detail/
+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\rest_framework\viewsets.py", line 125, 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\.\container\views.py", line 156, in create
+    print('托盘编码存在', data['container_id'])
+KeyError: 'container_id'
+[2025-03-29 15:12:23,059][django.request.log_response():241] [ERROR] Internal Server Error: /container/detail/
+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\rest_framework\viewsets.py", line 125, 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\.\container\views.py", line 178, in create
+    batch = bound_batch
+NameError: name 'bound_batch' is not defined
+[2025-03-29 15:57:04,351][django.request.log_response():241] [ERROR] Internal Server Error: /bound/detail/
+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\rest_framework\viewsets.py", line 125, 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:\language\python38\lib\site-packages\rest_framework\mixins.py", line 43, in list
+    return self.get_paginated_response(serializer.data)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 768, in data
+    ret = super().data
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 253, in data
+    self._data = self.to_representation(self.instance)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 686, in to_representation
+    return [
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 687, in <listcomp>
+    self.child.to_representation(item) for item in iterable
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 507, in to_representation
+    for field in fields:
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 368, in _readable_fields
+    for field in self.fields.values():
+  File "d:\language\python38\lib\site-packages\django\utils\functional.py", line 57, in __get__
+    res = instance.__dict__[self.name] = self.func(instance)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 356, in fields
+    for key, value in self.get_fields().items():
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 1052, in get_fields
+    field_names = self.get_field_names(declared_fields, info)
+  File "d:\language\python38\lib\site-packages\rest_framework\serializers.py", line 1148, in get_field_names
+    assert field_name in fields, (
+AssertionError: The field 'status' was declared on serializer BoundDetailGetSerializer, but has not been included in the 'fields' option.
+[2025-03-29 16:01:18,131][django.request.log_response():241] [ERROR] Internal Server Error: /container/detail/
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\language\python38\lib\site-packages\django\db\backends\sqlite3\base.py", line 357, in execute
+    return Database.Cursor.execute(self, query, params)
+sqlite3.IntegrityError: NOT NULL constraint failed: container_detail.batch_id
+
+The above exception was the direct cause of the following exception:
+
+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\rest_framework\viewsets.py", line 125, 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\.\container\views.py", line 218, in create
+    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 962, in create
+    instance = ModelClass._default_manager.create(**validated_data)
+  File "d:\language\python38\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
+    return getattr(self.get_queryset(), name)(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\db\models\query.py", line 671, in create
+    obj.save(force_insert=True, using=self.db)
+  File "d:\language\python38\lib\site-packages\django\db\models\base.py", line 812, in save
+    self.save_base(
+  File "d:\language\python38\lib\site-packages\django\db\models\base.py", line 863, in save_base
+    updated = self._save_table(
+  File "d:\language\python38\lib\site-packages\django\db\models\base.py", line 1006, in _save_table
+    results = self._do_insert(
+  File "d:\language\python38\lib\site-packages\django\db\models\base.py", line 1047, in _do_insert
+    return manager._insert(
+  File "d:\language\python38\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
+    return getattr(self.get_queryset(), name)(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\db\models\query.py", line 1790, in _insert
+    return query.get_compiler(using=using).execute_sql(returning_fields)
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\compiler.py", line 1660, in execute_sql
+    cursor.execute(sql, params)
+  File "d:\language\python38\lib\site-packages\django\db\backends\utils.py", line 103, in execute
+    return super().execute(sql, params)
+  File "d:\language\python38\lib\site-packages\django\db\backends\utils.py", line 67, in execute
+    return self._execute_with_wrappers(
+  File "d:\language\python38\lib\site-packages\django\db\backends\utils.py", line 80, in _execute_with_wrappers
+    return executor(sql, params, many, context)
+  File "d:\language\python38\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\language\python38\lib\site-packages\django\db\utils.py", line 91, in __exit__
+    raise dj_exc_value.with_traceback(traceback) from exc_value
+  File "d:\language\python38\lib\site-packages\django\db\backends\utils.py", line 89, in _execute
+    return self.cursor.execute(sql, params)
+  File "d:\language\python38\lib\site-packages\django\db\backends\sqlite3\base.py", line 357, in execute
+    return Database.Cursor.execute(self, query, params)
+django.db.utils.IntegrityError: NOT NULL constraint failed: container_detail.batch_id
+[2025-03-29 16:11:38,989][django.request.log_response():241] [ERROR] Internal Server Error: /container/detail/
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\django\db\models\fields\__init__.py", line 2018, in get_prep_value
+    return int(value)
+TypeError: int() argument must be a string, a bytes-like object or a number, not 'BoundListModel'
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+  File "D:\Document\code\vue\greater_wms\.\container\views.py", line 192, in create
+    bound_list_obj = BoundListModel.objects.filter(id=bound_detail_obj.bound_list).first()
+  File "d:\language\python38\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
+    return getattr(self.get_queryset(), name)(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\db\models\query.py", line 1420, in filter
+    return self._filter_or_exclude(False, args, kwargs)
+  File "d:\language\python38\lib\site-packages\django\db\models\query.py", line 1438, in _filter_or_exclude
+    clone._filter_or_exclude_inplace(negate, args, kwargs)
+  File "d:\language\python38\lib\site-packages\django\db\models\query.py", line 1445, in _filter_or_exclude_inplace
+    self._query.add_q(Q(*args, **kwargs))
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\query.py", line 1532, in add_q
+    clause, _ = self._add_q(q_object, self.used_aliases)
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\query.py", line 1562, in _add_q
+    child_clause, needed_inner = self.build_filter(
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\query.py", line 1478, in build_filter
+    condition = self.build_lookup(lookups, col, value)
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\query.py", line 1303, in build_lookup
+    lookup = lookup_class(lhs, rhs)
+  File "d:\language\python38\lib\site-packages\django\db\models\lookups.py", line 27, in __init__
+    self.rhs = self.get_prep_lookup()
+  File "d:\language\python38\lib\site-packages\django\db\models\lookups.py", line 341, in get_prep_lookup
+    return super().get_prep_lookup()
+  File "d:\language\python38\lib\site-packages\django\db\models\lookups.py", line 85, in get_prep_lookup
+    return self.lhs.output_field.get_prep_value(self.rhs)
+  File "d:\language\python38\lib\site-packages\django\db\models\fields\__init__.py", line 2020, in get_prep_value
+    raise e.__class__(
+TypeError: Field 'id' expected a number but got <BoundListModel: BoundListModel object (1)>.
+
+During handling of the above exception, another exception occurred:
+
+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\rest_framework\viewsets.py", line 125, 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\.\container\views.py", line 204, in create
+    print(f"更新批次 {goods_code} 失败: {str(e)}")
+NameError: name 'goods_code' is not defined
+[2025-03-29 16:13:20,414][django.request.log_response():241] [ERROR] Internal Server Error: /container/detail/
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\django\db\models\fields\__init__.py", line 2018, in get_prep_value
+    return int(value)
+TypeError: int() argument must be a string, a bytes-like object or a number, not 'BoundListModel'
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+  File "D:\Document\code\vue\greater_wms\.\container\views.py", line 192, in create
+    bound_list_obj = BoundListModel.objects.filter(id=bound_detail_obj.bound_list).first()
+  File "d:\language\python38\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
+    return getattr(self.get_queryset(), name)(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\db\models\query.py", line 1420, in filter
+    return self._filter_or_exclude(False, args, kwargs)
+  File "d:\language\python38\lib\site-packages\django\db\models\query.py", line 1438, in _filter_or_exclude
+    clone._filter_or_exclude_inplace(negate, args, kwargs)
+  File "d:\language\python38\lib\site-packages\django\db\models\query.py", line 1445, in _filter_or_exclude_inplace
+    self._query.add_q(Q(*args, **kwargs))
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\query.py", line 1532, in add_q
+    clause, _ = self._add_q(q_object, self.used_aliases)
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\query.py", line 1562, in _add_q
+    child_clause, needed_inner = self.build_filter(
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\query.py", line 1478, in build_filter
+    condition = self.build_lookup(lookups, col, value)
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\query.py", line 1303, in build_lookup
+    lookup = lookup_class(lhs, rhs)
+  File "d:\language\python38\lib\site-packages\django\db\models\lookups.py", line 27, in __init__
+    self.rhs = self.get_prep_lookup()
+  File "d:\language\python38\lib\site-packages\django\db\models\lookups.py", line 341, in get_prep_lookup
+    return super().get_prep_lookup()
+  File "d:\language\python38\lib\site-packages\django\db\models\lookups.py", line 85, in get_prep_lookup
+    return self.lhs.output_field.get_prep_value(self.rhs)
+  File "d:\language\python38\lib\site-packages\django\db\models\fields\__init__.py", line 2020, in get_prep_value
+    raise e.__class__(
+TypeError: Field 'id' expected a number but got <BoundListModel: BoundListModel object (1)>.
+
+During handling of the above exception, another exception occurred:
+
+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\rest_framework\viewsets.py", line 125, 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\.\container\views.py", line 204, in create
+    continue
+NameError: name 'goods_code' is not defined
+[2025-03-29 16:13:39,379][django.request.log_response():241] [ERROR] Internal Server Error: /container/detail/
+Traceback (most recent call last):
+  File "d:\language\python38\lib\site-packages\django\db\models\fields\__init__.py", line 2018, in get_prep_value
+    return int(value)
+TypeError: int() argument must be a string, a bytes-like object or a number, not 'BoundListModel'
+
+The above exception was the direct cause of the following exception:
+
+Traceback (most recent call last):
+  File "D:\Document\code\vue\greater_wms\.\container\views.py", line 192, in create
+    bound_list_obj = BoundListModel.objects.filter(id=bound_detail_obj.bound_list).first()
+  File "d:\language\python38\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
+    return getattr(self.get_queryset(), name)(*args, **kwargs)
+  File "d:\language\python38\lib\site-packages\django\db\models\query.py", line 1420, in filter
+    return self._filter_or_exclude(False, args, kwargs)
+  File "d:\language\python38\lib\site-packages\django\db\models\query.py", line 1438, in _filter_or_exclude
+    clone._filter_or_exclude_inplace(negate, args, kwargs)
+  File "d:\language\python38\lib\site-packages\django\db\models\query.py", line 1445, in _filter_or_exclude_inplace
+    self._query.add_q(Q(*args, **kwargs))
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\query.py", line 1532, in add_q
+    clause, _ = self._add_q(q_object, self.used_aliases)
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\query.py", line 1562, in _add_q
+    child_clause, needed_inner = self.build_filter(
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\query.py", line 1478, in build_filter
+    condition = self.build_lookup(lookups, col, value)
+  File "d:\language\python38\lib\site-packages\django\db\models\sql\query.py", line 1303, in build_lookup
+    lookup = lookup_class(lhs, rhs)
+  File "d:\language\python38\lib\site-packages\django\db\models\lookups.py", line 27, in __init__
+    self.rhs = self.get_prep_lookup()
+  File "d:\language\python38\lib\site-packages\django\db\models\lookups.py", line 341, in get_prep_lookup
+    return super().get_prep_lookup()
+  File "d:\language\python38\lib\site-packages\django\db\models\lookups.py", line 85, in get_prep_lookup
+    return self.lhs.output_field.get_prep_value(self.rhs)
+  File "d:\language\python38\lib\site-packages\django\db\models\fields\__init__.py", line 2020, in get_prep_value
+    raise e.__class__(
+TypeError: Field 'id' expected a number but got <BoundListModel: BoundListModel object (1)>.
+
+During handling of the above exception, another exception occurred:
+
+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\rest_framework\viewsets.py", line 125, 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\.\container\views.py", line 204, in create
+    continue
+NameError: name 'goods_code' is not defined
+[2025-03-29 16:54:03,580][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-29 16:54:12,886][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-29 16:54:40,260][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-29 16:54:44,395][django.request.log_response():241] [WARNING] Not Found: /asn/detail/
+[2025-03-29 16:54:49,884][django.request.log_response():241] [WARNING] Not Found: /cyclecount/qtyrecorviewset/