python - Django 有一个禁用的表单作为默认选择的表单
问题描述
我目前有以下代码。在我的 forms.py
from django import forms
from django.forms.widgets import Select
class SelectWithDisabled(Select):
def create_option(self, name, value, label, selected, index, subindex=None, attrs=None):
disabled = False
if isinstance(label, dict):
label, disabled = label['label'], label['disabled']
option_dict = super(SelectWithDisabled, self).create_option(name, value, label, selected, index, subindex=subindex, attrs=attrs)
if disabled:
option_dict['attrs']['disabled'] = 'disabled'
return option_dict
GAME_PHASES = [
('default', {'label': 'Choose an option', 'disabled': True}),
('opening', 'Opening'),
('midgame', 'Midgame'),
('endgame', 'Endgame'),
]
class SettingsForm(forms.Form):
game_phases = forms.ChoiceField(label='Phase of the Game:', choices=GAME_PHASES, required=True, widget=SelectWithDisabled)
为了澄清纯 HTML 代码,我希望我的代码执行以下操作:
<label for="phase">Phase of the Game:</label><br>
<select name="phase" id="phase" required>
<option selected disabled>Choose an option</option>
<option value="opening">Opening</option>
<option value="midgame">Midgame</option>
<option value="endgame">Endgame</option>
</select>
但是,“选择一个选项”行尚未按预期工作。
基本上,我希望我的 Django 表单代码做与纯 HTML 代码完全相同的事情。但是,在 Django 中,禁用/选择的标签似乎有冲突。在 HTML 中,当我将禁用字段设置为选中时,它从该选项开始,并且根本不会让用户在切换后返回到禁用选项。有没有办法做到这一点?默认情况下,Django 代码从 ('opening', 'Opening') 选项开始,这使得我的 required=True 字段完全过时,因为默认情况下用户被分配了该值。
PS:我的views.py看起来像这样
from django.http import HttpResponseRedirect
from django.shortcuts import render
from .forms import SettingsForm
def home_view(request):
if request.method == 'GET':
form = SettingsForm(request.GET)
if form.is_valid():
return HttpResponseRedirect('/play')
else:
form = SettingsForm()
return render(request, "home.html", {
'form': form
})
解决方案
推荐阅读
- multiprocessing - 为什么不同核数的多处理代码的运行时间相同?
- java - 在模块 classes.jar 中发现重复的类
- android - 没有firebase可以使用GCP吗?
- reactjs - IIS 8.5 rewrite rule subdirectory and ReactJs
- couchdb - 在 cluster_finished 之后将新节点添加到现有的 CouchDB 集群
- python - 如何使用 tf.one_hot 计算一种热编码?
- bash - 如何在 Jenkins 运行的 bash 脚本中转义单引号?
- sql - Rails 按关联记录数选择
- ruby-on-rails - 在数据库设计中管理多个类别的最佳方法
- ios - 如果未附加调试器,则 React Native 应用程序在启动时无响应