django .db.utils.DataError: (1406, «Слишком длинные данные для штрих-кодов столбцов в строке 1») - PullRequest
0 голосов
/ 26 апреля 2020

Я пытаюсь создать программу, которая принимает значения штрих-кодов с помощью сканера штрих-кодов и сохраняет значения штрих-кодов в дБ, возникают проблемы, когда я пытаюсь добавить более 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

Моя функция просмотра, которая создает объект для этого, выглядит следующим образом:

    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")


В котором указан c эта часть используется для создания объекта :

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")

Я застрял с этой ошибкой очень давно, и я не знаю, что делать. Любой подход будет оценен. Спасибо.

1 Ответ

0 голосов
/ 26 апреля 2020

В вашей модели штрих-коды столбцов длина поля char 255

barcodes = models.CharField(max_length=255)

Вы не можете хранить более 255 символов, так как это то, что вы установили как max_length, также будет полезно, если Вы храните более длинные тексты, чтобы изменить его на

barcodes = models.TextField()

И не забудьте перенастроить потом


Другой, возможно, более разумной идеей будет иметь связанную таблицу для штрих-кода

Поскольку вы фильтруете штрих-коды в вашем коде, это намного эффективнее

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...