You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Django中实现带企业标识的ID末尾数字自增问题求助

解决自动递增ID生成的字符串拼接错误问题

错误原因

你碰到的can only concatenate str (not "int") to str错误,根源是直接对存储的字符串格式ID(比如TES-PRODUCT-001)执行+1操作——字符串和整数无法直接相加,自然会报错。

修复方案

要实现带企业标识的自动递增ID,需要拆解现有ID的结构,提取数字部分递增后再重新拼接,同时兼容可变的企业标识:

  • 拆解ID,提取数字:用split('-')把现有ID拆分成三部分,取最后一段转成整数;
  • 数字递增并补零:对提取的数字加1后,用zfill()补零,保证位数一致(比如1转成001、2转成002);
  • 重新拼接完整ID:用当前企业标识、固定字符串PRODUCT和递增后的数字拼接成新ID;
  • 兼容可变企业标识:从用户会话或配置中获取当前企业标识,替换示例中的TES。

修改后的代码

views.py

def add_new_stock(request):
    # 从用户会话或配置中动态获取企业标识,示例用TES
    COMPANY_PREFIX = request.session.get('company_prefix', 'TES')
    stock_data = New_Stock_Entry.objects.all()
    
    if not stock_data:
        # 首次创建生成初始ID
        latest_item_code = f"{COMPANY_PREFIX}-PRODUCT-001"
    else:
        # 拆解最后一条记录的ID并递增数字
        last_item_code = New_Stock_Entry.objects.last().item_code
        parts = last_item_code.split('-')
        next_num = int(parts[-1]) + 1
        # 拼接新ID,保持三位数字格式
        latest_item_code = f"{COMPANY_PREFIX}-PRODUCT-{str(next_num).zfill(3)}"

    get_tax_code = Tax_Settings.objects.values('name', 'tax_percentage','tax_id')

    if request.method == 'POST':
        item = request.POST['item']
        hsn = request.POST['hsn']
        item_code = latest_item_code
        stock_in_date = request.POST['stock_in_date']
        quantity_in_hand = request.POST['quantity_in_hand']
        sales_price = request.POST['sales_price']
        item_description = request.POST['item_description']
        unit = request.POST['unit']
        tax_code = request.POST['tax_code']
        tax_obj = Tax_Settings.objects.get(tax_id=tax_code)
        
        item_creation_details = New_Stock_Entry.objects.create(
            item=item, hsn=hsn, item_code=item_code,
            stock_in_date=stock_in_date, quantity_in_hand=quantity_in_hand,
            sales_price=sales_price, item_description=item_description,
            unit=unit, tax_code=tax_obj
        )
        print("item_details", item_creation_details)
        return render(request, "inventory/add-stock.html")
    
    return render(request, "inventory/add-stock.html", {'get_tax': get_tax_code, 'latest_item_code': latest_item_code})

HTML模板

原模板重复写了ID前缀,现在latest_item_code已是完整ID,直接使用即可:

<input type="text" class="form-control" placeholder="{{latest_item_code}}" name="item_code">

关键改动说明

  • 新增COMPANY_PREFIX变量,支持动态获取企业标识,满足“随用户变化”的需求;
  • 替换错误的+1操作,改成拆解ID、提取数字递增后重新拼接的逻辑;
  • 用zfill(3)保证数字部分位数统一,可根据需求调整位数(比如zfill(2)得到01、02格式);
  • 移除冗余的item_creation_details.save(),因为create()方法会自动将对象保存到数据库。

内容的提问来源于stack exchange,提问作者Shweta Shinde

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 21:33:22