python - Django 表单从选项中选择或输入新数据
问题描述
我有一个 Django 表单,对于某些字段,我从数据库中提取选项,如下所示。
我有另一个字段,用户必须在其中手动输入数据。是否可以提供数据库中存在的字段选择以及如果不存在选择输入数据的选项?
示例:字段名称是球员,我希望所有球员都已经在数据库中作为可供选择的选项,如果是新球员,则输入它的选项。
这就是 TypedChoiceField 吗?我一直在努力寻找例子,但没有运气。
谢谢!
forms
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
team_names = TeamName.objects.filter(league__name='MLB').order_by('name')
teams = [(team.id, team.name)for team in team_names]
self.fields['team'].choices = teams
解决方案
TypedChoiceField 不是你想的那样。它只是从默认值而不是“------”空白值开始。
您无法在模型上定义选择=。而是在模型之外定义一个默认选项列表。
my_choices = (
"foo",
"bar",
"pop",
)
class MyModel(models.Model):
my_field = models.CharField(max_length=100)
然后在您的视图中,您希望导入该元组并将其传递给您的模板:
从 my_app.models 导入 my_choices
def my_view(request, *a, **kw):
# view logic
return render(request, "path/to/my/template", choices=my_choices)
然后在您的模板中,您可以有一个带有默认选项和字符串值的选择框。并且还有一个可选的输入类型=文本,如果填充,它将保存到该字段。
就像是:
<select name="my_field">
<option value="" selected="selected">-----</option>
{% for choice in choices %}
<option value="{{ choice }}">{{ choice }}</option>
{% endfor %}
</select>
会给你默认的选择。然后添加一个同名的输入,这将作为一个可选的新选择。
<input type="text" name="my_field"/>
或者,您可以编写 javascript 逻辑,以确保仅提交选择框或文本字段。
推荐阅读
- javascript - EventListener 不触发
- excel - Excel中的SolvStat Macro如何计算偏导数?
- javascript - 以编程方式在 Gatsby 上创建 PrivateRoutes
- powershell - Powershell Compare-object 如果不同,则仅列出一个文件中的项目,而不是两者
- visual-c++ - 如何通过 MAPI 将 CategoryList 从一个 PST 文件迁移到另一个?
- javascript - 为什么 Javascript 有 substr() 和 substring()?
- php - 我的 jquery 变量没有使用 POST 方法通过 php 文件
- html - 我怎样才能让这个 img srcset 代码工作?
- swiftui - 带有格式化程序的 SwiftUI TextField 不起作用?
- sql - 如何使用 $v 和 $t 在 Azure 门户上查询 Cosmos DB