标签: modelmultiplechoicefield

使用MultipleChoiceFilter时动态重新加载选择

我正在尝试构建一个MultipleChoiceFilter选项,其中的选择是相关模型(DatedResource)上可能存在的日期的集合。

到目前为止,这是我正在使用的东西...

resource_date = filters.MultipleChoiceFilter(
    field_name='dated_resource__date',
    choices=[
        (d, d.strftime('%Y-%m-%d')) for d in
        sorted(resource_models.DatedResource.objects.all().values_list('date', flat=True).distinct())
    ],
    label="Resource Date"
)
Run Code Online (Sandbox Code Playgroud)

当它显示在html视图中时...

在此处输入图片说明

最初,这很好用,但是,如果我创建DatedResource具有新的不同date值的新对象,则需要重新启动我的Web服务器,以使它们成为此过滤器中的有效选择。我相信这是因为该choices列表是在Web服务器启动时进行一次评估的,而不是在每次我的页面加载时进行评估的。

有什么办法可以解决这个问题?也许通过一些创造性的使用ModelMultipleChoiceFilter

谢谢!

编辑: 我尝试了一些简单的ModelMultipleChoice用法,但遇到了一些问题。

resource_date = filters.ModelMultipleChoiceFilter(
    field_name='dated_resource__date',
    queryset=resource_models.DatedResource.objects.all().values_list('date', flat=True).order_by('date').distinct(),
    label="Resource Date"
)
Run Code Online (Sandbox Code Playgroud)

HTML表单显示得很好,但是选择不是过滤器可接受的值。我"2019-04-03" is not a valid value.假设收到验证错误,因为此过滤器需要datetime.date对象。我考虑过使用coerce参数,但是ModelMultipleChoice过滤器不接受这些参数。

根据狄克格罗滕的评论,我尝试使用链接问题中的建议。最终像

resource_date = filters.ModelMultipleChoiceFilter(
    field_name='dated_resource__date',
    to_field_name='date',
    queryset=resource_models.DatedResource.objects.all(),
    label="Resource Date"
)
Run Code Online (Sandbox Code Playgroud)

这也不是我想要的,因为HTML现在的形式是:a)显示str每个的表示形式DatedResource,而不是DatedResource.date字段; …

django django-filters multiplechoicefield modelmultiplechoicefield

6
推荐指数
1
解决办法
263
查看次数