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
相关产品推荐
相关产品推荐

