我正在尝试使用 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。
最佳答案
一个简单的选择是在您的选择中添加一个空选项,例如:
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
避免修改模型的其他选项可能是管理 View 中的选择。如果您在 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>
因此,当您在 View 中收到 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) )
并且您只需要管理返回到模板的自定义错误
你确实有很多可能性去做你想做的事,但为了帮助我们帮助你,我们需要更多关于你的项目的信息,通常是你现在拥有的代码的某些部分以及你如何管理它.
做你想做的事的选项:
- 填写必填字段并使用ModelForm
- 制作自定义表单并自定义字段验证(如@dukeboy 所建议)
- 选择纯 HTML 并在 View 上管理
- ...
关于html - Django:不在列表中的下拉列表值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30343759/