Django 表单有选择但也有自由文本选项?

2024-01-02

我正在寻找什么:一个小部件,为用户提供一个下拉选择列表,但下面还有一个文本输入框,供用户输入新值。

后端模型将有一组默认选择(但不会在模型上使用choices关键字)。我知道我可以(而且我已经)通过让表单同时具有 ChoicesField 和 CharField 来实现这一点,并且如果 ChoicesField 保留为默认值,则让代码使用 CharField,但这感觉就像“un-django”。

有没有一种方法(使用 Django 内置程序或 Django 插件)来为表单定义类似 ChoiceEntryField (以 IIRC 执行此操作的 GtkComboboxEntry 为模型)之类的内容?

如果有人发现这一点,请注意,有一个类似的问题,关于如何从用户体验的角度最好地做我正在寻找的事情https://ux.stackexchange.com/questions/85980/is-there-a-ux-pattern-for-drop-down-preferred-but-free-text-allowed https://ux.stackexchange.com/questions/85980/is-there-a-ux-pattern-for-drop-down-preferred-but-free-text-allowed


我会推荐一种自定义的 Widget 方法,HTML5 允许您使用带有下拉列表的自由文本输入,该下拉列表可以用作选择一个或写入其他类型的字段,这就是我的制作方法:

字段.py

from django import forms

class ListTextWidget(forms.TextInput):
    def __init__(self, data_list, name, *args, **kwargs):
        super(ListTextWidget, self).__init__(*args, **kwargs)
        self._name = name
        self._list = data_list
        self.attrs.update({'list':'list__%s' % self._name})

    def render(self, name, value, attrs=None, renderer=None):
        text_html = super(ListTextWidget, self).render(name, value, attrs=attrs)
        data_list = '<datalist id="list__%s">' % self._name
        for item in self._list:
            data_list += '<option value="%s">' % item
        data_list += '</datalist>'

        return (text_html + data_list)

forms.py

from django import forms
from myapp.fields import ListTextWidget

class FormForm(forms.Form):
   char_field_with_list = forms.CharField(required=True)

   def __init__(self, *args, **kwargs):
      _country_list = kwargs.pop('data_list', None)
      super(FormForm, self).__init__(*args, **kwargs)

    # the "name" parameter will allow you to use the same widget more than once in the same
    # form, not setting this parameter differently will cuse all inputs display the
    # same list.
       self.fields['char_field_with_list'].widget = ListTextWidget(data_list=_country_list, name='country-list')

views.py

from myapp.forms import FormForm

def country_form(request):
    # instead of hardcoding a list you could make a query of a model, as long as
    # it has a __str__() method you should be able to display it.
    country_list = ('Mexico', 'USA', 'China', 'France')
    form = FormForm(data_list=country_list)

    return render(request, 'my_app/country-form.html', {
        'form': form
    })
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django 表单有选择但也有自由文本选项? 的相关文章

  • Django 模板 if 语句中的分组条件

    我想否定 django 模板中 if 语句中分隔的一组条件或的结果 这是我的代码 if not owner home number or owner work number or owner mobile number No contact
  • Django:在 ModelForm 中为外键添加“添加新”按钮

    TL DR 如何在 ModelForm 中为外键添加 添加新 按钮 长版 我在一个项目中使用 Django 1 7 我的 models py 中有这两个模型 class Client models Model name models Cha
  • 如何在序列化器创建方法中获取 URL Id?

    我有以下网址 url r member P
  • 奇怪的 MySQL Python mod_wsgi 无法连接到 'localhost' (49) 上的 MySQL 服务器问题

    StackOverflow上也有类似的问题 但我还没有发现完全相同的情况 这是在使用 MySQL 的 OS X Leopard 机器上 一些起始信息 MySQL Server version 5 1 30 Apache 2 2 13 Uni
  • 如何将 Django Admin 中的 DateTimeField 格式化为本地时间?

    如何根据本地时间和时区在管理中格式化日期时间字段 我的设置 py TIME ZONE Europe Bratislava LANGUAGE CODE en us USE I18N True USE L10N True USE TZ True
  • 使用 datetime 与 Django 中的日期进行比较

    我在 Django 中有一个关于如何比较日期来解决一些解决方案的问题 例如 我的 models py 中有一个日期字段 如下所示 class Invoice models Model payment date models DateTime
  • 搜索多个字段

    我想我没有正确理解 django haystack 我有一个包含多个字段的数据模型 我希望搜索其中两个字段 class UserProfile models Model user models ForeignKey User unique
  • Django while 循环

    我想知道是否有任何方法可以在 django 中执行 while 循环 我认为这就是我所追求的 我想做的是一个嵌套的 ul li 列表 该列表是由 for 循环中的 for 循环生成的 但由于第二个 for 循环中的某些元素有更多的子节点 我
  • Django send_mail SMTPSenderRefused 530 与 gmail

    一段时间以来 我一直在尝试使用 Django 从我正在开发的网站接收电子邮件 现在 我还没有部署它 并且我正在使用Django开发服务器 我不知道这是否会影响它 这是我的 settings py 配置 EMAIL BACKEND djang
  • Geodjango距离查询未检索到正确的结果

    我正在尝试根据地理位置的接近程度来检索一些帖子 正如您在代码中看到的 我正在使用 GeoDjango 并且代码在视图中执行 问题是距离过滤器似乎被完全忽略了 当我检查查询集上的距离时 我得到了预期距离 1m 和 18km 但 18km 的帖
  • 获取用户最近城市的最佳方式? Python/Django

    我有一个数据库中城市数量有限的网站 需要向用户显示距离他当前位置最近的城市 我可以通过 MaxMind API 获取位置 但我想获取数据库中距用户城市最近的城市 例如 如果我的数据库中有这些城市 Los Angeles San Franci
  • 表单输入框不显示

    我正在尝试使用 Django 显示一个简单的表单输入文本框 我正在亚马逊 AWS 上部署 该网站在不同的服务器 pythonanywhere 上运行良好 但在 AWS 上存在主要问题 具体来说 输入框没有被显示 我使用的模板如下 首页 ht
  • Django ImageField 默认值

    模型 py class UserProfile models Model photo models ImageField upload to get upload file name storage OverwriteStorage def
  • 在 Javascript 中使用 fetch API 接收和处理 JSON

    在我的项目中 当条件不足时 我的 Django 应用程序会发送带有消息的 JSON 响应 我使用这个 JsonResponse 指令 Code data is taken email email return JsonResponse da
  • Django中的自动递增值

    我在 django 中有一个表并尝试自动递增它的序列号 在自定义模板中 for 循环用于变量 自定义模板 for i in getodeskview tr td 1 td td i odesk id td td i hours td td
  • Django 'ImportError:无法导入名称 url'

    您好 有人可以帮我解决 ImportError 无法导入名称 url 问题吗 我在这里遵循了教程https docs djangoproject com en 1 9 intro tutorial01 https docs djangopr
  • 当我这样做时什么也没有发生: python manage.py 命令

    我是 django 新手 目前正在学习主要教程 尽管它早些时候工作过 但当我执行 python manage py runserver 或 python manage py h 或使用任何其他命令时 shell 不会输出任何内容 想知道我做
  • IIS 上的 Django:调试由于大文件上传上的 FastCGI 请求超时而导致的 IIS 错误

    我正在尝试在带有 IIS 10 和 FastCGI 的 Windows 10 计算机上托管 Django Web 应用程序 虽然到目前为止一切都运行良好 但我在上传较大文件 120MB 时遇到了某些 POST 请求的问题 即 HTTP 50
  • 如何在亚马逊 EC2 上调试 python 网站?

    我是网络开发新手 这可能是一个愚蠢的问题 但我找不到可以帮助我的确切答案或教程 我工作的公司的网站 用 python django 构建 托管在亚马逊 EC2 上 我想知道从哪里开始调试这个生产站点并检查存储在那里的日志和数据库 我有帐户信
  • Django 管理器链接

    我想知道是否有可能 如果可以的话 如何 将多个管理器链接在一起以生成受两个单独管理器影响的查询集 我将解释我正在研究的具体示例 我有多个抽象模型类 用于为其他模型提供小型的特定功能 其中两个模型是DeleteMixin 和GlobalMix

随机推荐