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

使用Django如何分别存储包装箱与设备两类图片对应的描述信息

解决方案

核心问题是前端两个上传控件使用了相同的name属性,后台无法区分图片所属分类,所有图片统一赋值了两类描述导致异常。按以下三步修改即可:

1. 修改前端表单Receptionunservicable.html

将两个上传控件的name属性区分开,避免两类图片混同:

<!-- 包装箱上传部分修改为 -->
<div>
    <label>Upload Box Photo</label>
    <input required name="box_images" type="file" multiple class="form-control-file">
</div>

<!-- 设备上传部分修改为 -->
<div>
    <label>Upload Equipment Photo</label>
    <input required name="equipment_images" type="file" multiple class="form-control-file">
</div>

表单其余代码保持不变。

2. 修改models.py适配存储逻辑

因为包装箱图片记录不需要设备描述、设备图片记录不需要包装箱描述,所以将两个描述字段设置为可空,避免创建时报字段校验错误:

class Photo(models.Model):
    class Meta:
        verbose_name = 'Photo'
        verbose_name_plural = 'Photos'

    image = models.ImageField(null=False, blank=False)
    # 两个描述字段改为可空
    descriptionbox = models.TextField(blank=True, null=True)
    serialno = models.TextField()
    partno = models.TextField()
    reception = models.TextField()
    customername = models.TextField()
    descriptionequipment = models.TextField(blank=True, null=True)


    def __str__(self):
        return self.descriptionbox or self.descriptionequipment

修改完成后执行以下命令更新数据库结构:
python manage.py makemigrations
python manage.py migrate

3. 修改views.py分分类处理上传逻辑

后台分别获取两类图片列表,创建记录时仅赋值对应分类的描述字段:

@login_required()
def ReceptionUnserviceable(request):
    descriptionbox = Photo.objects.all()

    if request.method == 'POST':
        data = request.POST
        # 分别获取两类上传图片
        box_images = request.FILES.getlist('box_images')
        equipment_images = request.FILES.getlist('equipment_images')

        # 批量创建包装箱图片记录
        for image in box_images:
            Photo.objects.create(
                descriptionbox=data['descriptionbox'],
                image=image,
                serialno=data['serialno'],
                partno=data['partno'],
                reception=data['reception'],
                customername=data['customername'],
                descriptionequipment=None
            )

        # 批量创建设备图片记录
        for image in equipment_images:
            Photo.objects.create(
                descriptionbox=None,
                image=image,
                serialno=data['serialno'],
                partno=data['partno'],
                reception=data['reception'],
                customername=data['customername'],
                descriptionequipment=data['descriptionequipment']
            )

        return redirect('success')

    context = {}
    return render(request, 'ReceptionUnserviceable.html', context)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 05:36:00