【问题标题】:Django Filters - ModelChoiceFilter Distinct Values from FieldDjango 过滤器 - ModelChoiceFilter 字段中的不同值
【发布时间】:2019-08-03 01:22:09
【问题描述】:

我正在尝试从我的msg_direction 字段中获取不同选择的列表,这些字段填充在我的表单中。在选择和 GET 时,将应用过滤器并使用过滤后的数据刷新页面。代码在我做出选择之前一直有效,我使用ModelChoiceFilter 得到以下验证错误: * 选择一个有效的选项。该选择不是可用的选择之一。

这是我模型中的字段定义:

msg_direction = models.CharField(max_length=20)

这是我的 filters.py 文件中的过滤器定义:

msg_direction = ModelChoiceFilter(queryset=Message.objects.
                                 values_list('msg_direction',
                                 flat=True).distinct().order_by())

我也尝试过ChoiceFilter,但我更愿意使用从该字段动态生成的列表,而不是指定一个固定的选项列表。

提前致谢!

【问题讨论】:

  • a ModelChoiceFilter 用于选择模型实例(因此它需要实例的id),而不是从数据库中特定列的值列表中进行选择。您应该使用ChoiceFilter 并将数据库中的值列表作为选项列表传递。没有什么能阻止您使用在运行时计算的列表来初始化您的 ChoiceFilter

标签: django python-3.x


【解决方案1】:

感谢您的澄清,dirkgroten!这是我想出的:

def get_choices(model, field):
    choices = []
    for k in model.objects.values_list(field).distinct():
        choices.append((k[0], k[0]))
    return choices

msg_direction = ChoiceFilter(choices=get_choices(Message, 'msg_direction'))

对效率有什么进一步的建议吗?

【讨论】:

    猜你喜欢
    • 2020-05-26
    • 1970-01-01
    • 2021-12-08
    • 2020-05-31
    • 2015-03-25
    • 1970-01-01
    • 1970-01-01
    • 2017-01-31
    • 2010-12-15
    相关资源
    最近更新 更多