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

Django提交表单时如何从预定义状态列表取默认step1值存入数据库

实现方法

1. 补全models.py的状态字段

你目前只在Photo模型里定义了状态枚举,没有新增对应的数据库存储字段,先补充字段并设置默认值为STEP1,这样新建记录时会自动存入step1的值:

class Photo(models.Model):
    STEP1 = "step 1"
    STEP2 = "step 2"
    STEP3 = "step 3"
    STEP4 = "step 4"

    STATUS = (
        (STEP1, 'Received'),
        (STEP2, 'Cleaning'),
        (STEP3, 'Leak '),
        (STEP4, 'Loss Pressure Test'),
    )

    Datetime = models.DateTimeField(auto_now_add=True)
    # 新增状态字段,默认值为STEP1
    status = models.CharField(max_length=20, choices=STATUS, default=STEP1)
    serialno = models.TextField()  # serialno stand for serial number
    partno = models.TextField()  # partno stand for part number
    reception = models.TextField()
    Customername = models.TextField()

    def __str__(self):
        return self.reception

修改完后执行python manage.py makemigrations和python manage.py migrate同步数据库结构。

2. 视图逻辑无需额外调整

因为已经给status字段设置了默认值,你原来的视图代码中创建Photo实例的逻辑不需要修改,保存记录时会自动把STEP1的值存入status字段。
如果不想用默认值配置,也可以在实例化Photo时手动指定status:

form = Photo(
    Datetime=Datetime, 
    reception=reception, 
    partno=partno, 
    serialno=serialno, 
    Customername=Customername,
    status=Photo.STEP1 # 手动指定状态为STEP1
)

3. 详情页显示对应状态文本

Django为choices类型字段提供了自动映射展示文本的方法,你在展示页模板中,需要显示操作完成状态的位置,调用get_status_display方法即可输出STEP1对应的Received文本:

<!-- 假设你遍历的Photo实例对象名为photo -->
<td>{{ photo.get_status_display }}</td>

这样就可以在操作完成列默认显示Received状态了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 12:06:04