如何用选择填充 Django 自定义多项选择字段



我有一个带有搜索框的表单,该搜索框使用jQuery来填充multiChoiceField。我需要使用自定义的 multipleChoiceField,以便我可以控制验证并只检查该选项是否存在,而不是它是否是原始选择之一,就像带有查询集的 modelMultipleChoiceField 那样。但是,自定义 multipleChoiceField 在页面上呈现为空,直到您在搜索框中输入内容以通过 jQuery 用选项填充它。我希望它首先提供一些选择。

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,在所有这 3 种情况下,我总是得到一个空的多项选择字段。

如何使用查询集在此处提供初始选择集?

这是它的使用形式:

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

此外,这是由Crispy Forms渲染的。

choices

不接受QuerySet 作为参数,它需要一个具有可接受值的两个元组的列表或元组。请参阅此处有关choices的文档:https://docs.djangoproject.com/en/2.0/ref/models/fields/#field-choices 。

在这种情况下,您需要将Article查询集转换为上述格式的列表或元组。

最新更新