首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >django.db.utils.DataError:(1406,“第1行的列‘条形码’数据太长”)

django.db.utils.DataError:(1406,“第1行的列‘条形码’数据太长”)
EN

Stack Overflow用户
提问于 2020-04-27 01:52:58
回答 1查看 291关注 0票数 0

我正在尝试做一个程序,用条形码扫描器获取条形码的值,并将条形码的值保存在数据库中,当我尝试添加超过5-6个条形码时出现问题。它给我"django.db.utils.DataError:(1406,"Data too long for column‘barcode’at row 1")“错误。我已经确定它是一个model.textfield(),但这并不能解决我的问题。我的模型是这样的:

代码语言:javascript
复制
    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,如下所示:

代码语言:javascript
复制
    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:

代码语言:javascript
复制
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")

我被这个错误困扰了很长时间,我不知道该怎么办。任何一种方法都会受到欢迎。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-04-27 02:18:06

从您的模型中,您的列条形码是字符字段长度255

代码语言:javascript
复制
barcodes = models.CharField(max_length=255)

您不能存储超过255个字符,因为这是您设置为max_length的字符,如果您要存储更长的文本以将其更改为,这将是有益的

代码语言:javascript
复制
barcodes = models.TextField()

,之后别忘了迁移

另一个可能更合理的想法是为条形码提供相关的表

当您在代码中过滤条形码时,效率要高得多

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61445449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档