我正在尝试使用Django
将值输入到列表中不在列表中的下拉列表中。从数据库中读取默认值
但诀窍是,用户可以看到值,但不能改变它。
有没有办法用Django
来做?
Django
将不允许我在下拉列表中显示models.py
中未定义的内容,因此对象仍为空。
有什么想法吗?也许有些走动?
由于
代码:
aList = (('OK', 'OK'), ('Not', 'Not'))
class sampleModel(models.Model):
name = models.CharField(max_length=32, blank=True)
res = models.CharField(max_length=10, blank=True, choices=aList)
从另一个数据库进入OK *和Not *。我需要在下拉列表中显示OK * / Not *,但是用户不能使用它,但仍然可以更改为正常OK / Not。
答案 0 :(得分:1)
一个简单的选择可能是为您的选择添加一个空选择,如:
aList = (
('', 'OK/Not')
('OK', 'OK'),
('Not', 'Not')
)
并使字段res
成为必需,因此您无法传递空值,因此如果用户选择空选项,表单将返回错误,直到他选择其中一个有效选项
你应该改变你的领域:
res = models.CharField(max_length=10, blank=True, choices=aList)
有:
res = models.CharField(max_length=10, choices=aList)
唯一的更改是删除 blank = True ,以便重新填写该字段。
所有这一切都假设您有一些基于模型生成的Django ModelForm
避免修改模型的其他选项可能是管理视图中的选择。如果您在HTML中选择3选项:
<select name="mySelect" id="id_mySelect">
<option value="" selected="selected">Please select value</option>
<option value="value1">Ok</option>
<option value="value2">Not</option>
</select>
因此,当您在视图中收到POST时,您可以执行以下操作:
error = False
error_text = ''
# Manually get the value of the select in your view
myselect = request.POST.get('mySelect', None)
# If the value of the select is '' return an error to the template
if not myselect:
error = True
error_text = 'You have to select an option'
return ('yourtemplate.html', {'error':error, 'error_text': error_text}, context_instance=RequestContext(request) )
您只需要管理您返回模板的自定义错误
你真的有很多可能去做你想做的事情,但是为了帮助我们,我们需要更多关于你项目的信息,通常是你现在拥有的代码的一部分以及你如何管理它也是。
做你想做的事情的选项: