Python 如何用选项填充Django自定义MultipleChiceField

Python 如何用选项填充Django自定义MultipleChiceField,python,django,django-forms,Python,Django,Django Forms,我有一个带有搜索框的表单,它使用jQuery来填充一个multipleechoicefield。我需要使用一个自定义的multipleechoicefield,这样我就可以控制验证,并且只检查该选项是否存在,而不是像带有queryset的modelmultipleechoicefield那样检查它是否是原始选项之一。但是,在您通过jQuery在搜索框中输入某些内容并用选项填充之前,自定义的multipleChoiceField在页面上呈现为空。我希望它以几个选项开始呈现 class Articl

我有一个带有搜索框的表单,它使用jQuery来填充一个multipleechoicefield。我需要使用一个自定义的multipleechoicefield,这样我就可以控制验证,并且只检查该选项是否存在,而不是像带有queryset的modelmultipleechoicefield那样检查它是否是原始选项之一。但是,在您通过jQuery在搜索框中输入某些内容并用选项填充之前,自定义的multipleChoiceField在页面上呈现为空。我希望它以几个选项开始呈现

class ArticleMultipleChoiceField(forms.MultipleChoiceField):
   def __init__(self, *args, **kwargs):
      super(ArticleMultipleChoiceField, self).__init__(*args, **kwargs)
      include_articles = [article.id for article in Article.objects.order_by('-sub_date')[:5]]
      self.choices = Article.objects.filter(id__in=include_articles).order_by('-sub_date')
在这种形式下,我得到的错误文章对象是不可编辑的。我还尝试将self.choices更改为self.data、self.queryset和self.initial,在所有这三种情况下,我总是得到一个空的多项选择字段

class ArticleMultipleChoiceField(forms.MultipleChoiceField):
   def __init__(self, *args, **kwargs):
      super(ArticleMultipleChoiceField, self).__init__(*args, **kwargs)
      include_articles = [article.id for article in Article.objects.order_by('-sub_date')[:5]]
      self.choices = Article.objects.filter(id__in=include_articles).order_by('-sub_date')
如何使用查询集在此处提供初始选择集

以下是它的使用形式:

class StorylineAddArticleForm(forms.Form):
  articleSearchBox = forms.CharField(label="Search to narrow list below:")
  include_articles = [article.id for article in Article.objects.order_by('-sub_date')[:5]]
  articles = ArticleMultipleChoiceField()
  def __init__(self, *args, **kwargs):
    super(StorylineAddArticleForm, self).__init__(*args, **kwargs)
    self.fields['articleSearchBox'].required = False
    self.helper = FormHelper(self)
    self.helper.layout = Layout(
        Field('articleSearchBox'),
        Field('articles'),
        ButtonHolder(
            Submit('submit', 'Add', css_class='button white')
        )
        )
此外,这是由脆的形式

choices不接受QuerySet作为参数,它需要一个包含两个元组的列表或元组,并具有可接受的值。请参阅此处有关选项的文档:

在这种情况下,您需要将文章queryset转换为上述格式的列表或元组