我正在尝试创建一个程序,该程序使用条形码扫描仪获取条形码的值并将条形码的值保存在db中,当我尝试添加5-6个以上的条形码时会出现问题。它给我“ django.db.utils.DataError:(1406,“数据对于第1行的'条形码'列来说太长了”))错误。我已经确定它是一个model.textfield(),但这不能解决我的问题。我的模型如下:
id = models.IntegerField(primary_key=True)
barcodes = models.CharField(max_length=255)
to_warehouse = models.CharField(max_length=255)
from_warehouse = models.CharField(max_length=255)
total_count = models.IntegerField()
approval_flag = models.IntegerField(default=0)
current_status = models.CharField(max_length=50, blank=True, null=True)
error_message = models.CharField(max_length=255, blank=True, null=True)
created_by = models.CharField(max_length=50, blank=True, null=True)
created_at = models.DateTimeField(blank=True, null=True, auto_now_add=True)
class Meta:
managed = False
db_table = 'transfer_inventory'
def __str__(self):
return "%s" % self.id
为该对象创建obj的我的视图函数如下:
def change_status(self, barcodes, warehouse_id, request, is_error="", msg=""):
barcode_count = barcodes.count(',')
_list_barcodes = barcodes.split(",")
print("list: ", list)
list_barcodes = []
to_warehouse = Warehouse.objects.filter(id=warehouse_id).values_list('key', flat=True)[0]
try:
current_warehouse = UserWarehouseMapping.objects.filter(
user=request.user).values_list('warehouse__key', flat=True).first()
except:
current_warehouse = "-"
for i in _list_barcodes:
list_barcodes.append(i)
list_barcodes = list_barcodes.pop(len(list_barcodes) - 1)
available_barcodes = list(
Inventory.objects.filter(inventory_status='available').values_list('barcode', flat=True))
InventoryTransfer.objects.create(barcodes=barcodes, to_warehouse=to_warehouse,
total_count=barcode_count,
created_by=request.user.username,
from_warehouse=current_warehouse, current_status="Pending")
此部分用于创建obj的具体位置:
InventoryTransfer.objects.create(barcodes=barcodes, to_warehouse=to_warehouse,
total_count=barcode_count,
created_by=request.user.username,
from_warehouse=current_warehouse, current_status="Pending")
很长一段时间以来,我一直坚持这个错误,我不知道该怎么办。任何类型的方法将不胜感激。谢谢。
在您的模型中,您的列条形码为字符长度255
barcodes = models.CharField(max_length=255)
您不能存储超过255个字符,因为这是设置为max_length的字符,如果要存储更长的文本以将其更改为[],也将是有益的
barcodes = models.TextField()
并且不要忘了以后迁移
其他也许更合理的想法是为条形码提供相关表
当您通过代码中的条形码进行过滤时,效率会更高