from django.db import models class StockshelfModel(models.Model): warehouse_code = models.CharField(max_length=255, verbose_name="Warehouse code") warehouse_name = models.CharField(max_length=255, verbose_name="Warehouse Name") shelf_name = models.CharField(max_length=255, verbose_name="Shelf Name") shelf_type = models.CharField(max_length=255,default = 'storage', verbose_name="Shelf Type") row = models.IntegerField(verbose_name="Row") # 位置的行号 col = models.IntegerField(verbose_name="Column") # 位置的列号 layer = models.IntegerField(verbose_name="Layer") # 位置的层号 ip_address = models.CharField(max_length=255, default = '127.0.0.1',verbose_name="IP Address") port = models.IntegerField(default = 8000, verbose_name="Port") status = models.CharField(max_length=255, default = 'offline',verbose_name="Status") # openid = models.CharField(max_length=255, verbose_name="Openid") create_time = models.DateTimeField(auto_now_add=True, verbose_name="Create Time") update_time = models.DateTimeField(auto_now=True, blank=True, null=True, verbose_name="Update Time") empty_label = models.BooleanField(default=True, verbose_name="Empty Flag") shelf_department = models.CharField(max_length=255, default = '货架部门', verbose_name="Shelf Department") shelf_status = models.CharField(max_length=255, default = '未满', verbose_name="Shelf Status") goods_code = models.CharField(max_length=255,default = 'A010203', verbose_name="Goods Code") goods_name = models.CharField(max_length=255,default = '待填写', verbose_name="Goods Name") goods_std = models.CharField(max_length=255,default = '待填写', verbose_name="Goods Standard") goods_desc = models.CharField(max_length=255,default = '待填写', verbose_name="Goods Description") goods_qty = models.BigIntegerField(default=0, verbose_name="Goods Quantity") goods_unit = models.CharField(max_length=255,default = '件', verbose_name="Goods Unit") goods_price = models.DecimalField(max_digits=10, default=0,decimal_places=2, verbose_name="Goods Price") goods_batch = models.CharField(max_length=255,default = '待填写', verbose_name="Goods Batch") goods_notes = models.CharField(max_length=255,default = '待填写', verbose_name="Goods Notes") goods_in = models.BigIntegerField(default=0, verbose_name="Goods In") goods_out = models.BigIntegerField(default=0, verbose_name="Goods Out") class Meta: db_table = 'shelflist' verbose_name = 'Shelf List' verbose_name_plural = "Shelf List" ordering = ['-id'] unique_together = ('shelf_name', 'warehouse_code','row', 'col', 'layer') # 防止重复坐标 def save(self, *args, **kwargs): """自动更新 empty_label 状态""" self.empty_label = (self.goods_qty == 0) super().save(*args, **kwargs) @classmethod def get_existing_positions(cls, warehouse_code,shelf_name, rows, cols, layers): """获取已存在的坐标集合""" return set( cls.objects.filter( warehouse_code=warehouse_code, shelf_name=shelf_name, row__lte=rows, col__lte=cols, layer__lte=layers ).values_list('row', 'col', 'layer') )