从标准 Django 形式 select 转换为 select2 的问题

Problem converting from standard django form select to select2

我正在尝试将 django 形式从使用标准 select 转换为 select2。我已按照说明安装 django-select-forms,将 select2 添加到 INSTALLED_APPS,并在 header 块

中包含 select2 链接和脚本

这是我的原始代码

Model.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')

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

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

from django_select2.forms import <b>Select2Widget</b>

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': <b>Select2Widget</b> }

也就是说,由于您已经在 __init__ 中指定了一些数据,将其定义为 class 属性可能更优雅:

from django_select2.forms import <b>Select2Widget</b>

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