非常简短的背景;我要求人们在17个片段的视频中对人类心脏的表现进行评分。它们必须对所有17个进行评级。但是,它们可能必须在最多4个不同的工作负载(休息,低,高,恢复)下执行此操作。它可能是1,可能是全部4.评级可以是1到5.我已经添加了第6个选项,原因可以在后面看到。
segment_choices = (
(1, "Normal"),
(2, "Hypokinetic"),
(3, "Akinetic"),
(4, "Dyskinetic"),
(5, "Aneursymal"),
(6, "No image"),
)
segment_1_1 = models.IntegerField(choices=segment_choices,default=1)
segment_1_2 = models.IntegerField(choices=segment_choices,default=1)
segment_1_3 = models.IntegerField(choices=segment_choices,default=1)
segment_1_4 = models.IntegerField(choices=segment_choices,default=1)
segment_2_1 = models.IntegerField(choices=segment_choices,default=1)
...
segment_16_4 = models.IntegerField(choices=segment_choices,default=1)
segment_17_1 = models.IntegerField(choices=segment_choices,default=1)
segment_17_2 = models.IntegerField(choices=segment_choices,default=1)
segment_17_3 = models.IntegerField(choices=segment_choices,default=1)
segment_17_4 = models.IntegerField(choices=segment_choices,default=1)
我目前的工作方式是,我不会为IntegerField绘制对应于某个工作负载(例如休息)的模板标签,如果hr_rest值未设置,如下所示:
{% if not echo.hr_rest = None %}<tr><td>Rest:</td><td>{{ ReportForm.segment_10_1 }}</td></tr>{% endif %}
这很好用,但问题是当然,当我提交表单时,如果表单的字段没有被绘制,则表示值丢失,表单抛出并出错(我没有&# 39; t在模型中设置空白=真,空=真,因为这似乎是一种危险的解决方法 - 我 DO 希望确保不会遗漏这些值。
所以我有一些解决方案
在问题丢失时绘制下拉框,但禁用它们。即使他们说'正常',我也不会介意。在它们中,只要它们被禁用,因为用户仍然可以跳过它们而不会混淆。然后,我可以忽略&#39;数据处理阶段的这些正常值。
绘制下拉框但将{%if not echo.hr_rest = None%}下拉框的默认值设置为6(&#34;无图像&#34;);它可能不需要被禁用,因为他们会看到没有图像并继续前进。或者我可以将默认值设置为&#34;没有图像&#34;在Models.py中,它默认为&#34;正常&#34;当为绘制的人绘制时,并不重要。
将下拉框绘制为隐藏&#39;某些条件下的字段 - 当然这非常好用,因为所有的值都会在没有用户注意的情况下发送到视图。
我有很多解决方案,但似乎没有一个易于实施,我不确定哪个最好。
你们都建议什么?
非常感谢你。
答案 0 :(得分:0)
在views.py
中,您可以设置字段的初始值并将其限制为......
if <instance>.<whatever> is None:
form.fields['<whatever>'].initial = 'No Image'
form.fields['<whatever>'].choices = ((6, 'No Image'),)