【问题标题】:Problem converting from standard django form select to select2从标准 django 表单选择转换为 select2 的问题
【发布时间】:2019-08-17 13:05:34
【问题描述】:

我正在尝试将 django 表单从使用标准选择转换为 select2。我已按照说明安装了 django-select-forms,将 select2 添加到 INSTALLED_APPS,并在标题块中包含 select2 链接和脚本

这是我的原始代码

模型.py

    class Photographer(models.Model):
        author_id = models.CharField(max_length=50, primary_key=True)
        displayname = models.CharField(max_length=50)

forms.py

    class UploadFileForm(forms.ModelForm):
        def __init__(self, *args, **kwargs):
            super(UploadFileForm, self).__init__(*args, **kwargs)
            self.fields['author'].required = True
            self.fields['author'].queryset = 
    Photographer.objects.all().order_by('displayname')

无论如何我可以在不改变我的模型的情况下做到这一点吗?

【问题讨论】:

  • 你遇到了什么问题?

标签: django jquery-select2


【解决方案1】:

通常您只需要指定您使用的小部件:

from django_select2.forms import Select2Widget

class UploadFileForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(UploadFileForm, self).__init__(*args, **kwargs)
        self.fields['author'].required = True
        self.fields['author'].queryset = Photographer.objects.order_by('displayname')

    class Meta:
        widgets = {'author': Select2Widget }

话虽如此,由于您已经在 __init__ 中指定了一些数据,因此将其定义为类属性可能更优雅:

from django_select2.forms import Select2Widget

class UploadFileForm(forms.ModelForm):
    author = ModelChoiceField(
        queryset=Photographer.objects.order_by('displayname'),
        required=True,
        widget=Select2Widget
    )

【讨论】:

  • 谢谢。我相应地进行了更改,但呈现的形式没有变化。我希望在下拉列表中看到一个文本框,我可以输入名称而不是向下滚动长列表。
  • @ChariPete:您是否看到 HTML 中的差异(如果您添加/删除小部件)?你确定 CSS 和 JS 在响应中加载正常吗(大多数浏览器都有一个 inspector )。
  • 我确实有js脚本,但是如何在表单中添加select id?
  • @ChariPete:但您还需要包含 css:django-select2.readthedocs.io/en/latest/…
  • 感谢您的帮助。我错过了css
猜你喜欢
  • 1970-01-01
  • 2021-12-27
  • 2017-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多