【问题标题】:Django forms select from choices or enter new dataDjango 表单从选项中选择或输入新数据
【发布时间】:2021-04-04 12:41:33
【问题描述】:

我有一个 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

【问题讨论】:

    标签: python django forms


    【解决方案1】:

    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 逻辑来确保仅提交选择框或文本字段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-04
      • 2018-08-27
      • 1970-01-01
      • 1970-01-01
      • 2014-02-25
      • 2021-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多