【问题标题】:Django_filters changing label, how to figure out default filter typeDjango_filters 更改标签,如何找出默认过滤器类型
【发布时间】:2021-06-18 20:57:42
【问题描述】:

我正在使用 django_filter,在模板中以我自己的方式显示它。我想编辑其中一个过滤器的标签。为此,我需要提供过滤器类型。它在默认情况下效果很好,但我无法确定使用哪种过滤器类型。我的模型中的这个字段如下所示:

class Zamowienie(models.Model):
    zam_kontrahent_fk = models.ForeignKey(Kontrahent, on_delete=models.CASCADE)
    class Meta:
        ordering = ['knt_kod']
        verbose_name_plural = 'Kontrahenci'

    objects = models.Manager()

    def __str__(self):
        return str(self.knt_nazwa)

在模板上它看起来像典型的选择框。我发现它不是django_filters.ChoiceFilter,而是django_filters.ModelChoiceFilter。我尝试使用它的 queryset 选项,但它只显示 primary_keys 列表(1 而不是表 foreign_key 中的 'name' 字段)

class ZamowienieFilter(django_filters.FilterSet):
    zam_status = django_filters.ModelChoiceFilter(label='Status', queryset=Zamowienie.objects.order_by('zam_kontrahent_fk').values_list('zam_kontrahent_fk', flat=True).distinct())

    class Meta:
        model = Zamowienie
        fields = [
            'zam_kontrahent_fk',
        ]

这是正确的处理方法吗?我没有找到记录默认过滤器行为的方法,它会很有帮助,只需复制这个片段。知道如何显示值,而不是 primary_keys 列表吗?

【问题讨论】:

    标签: django django-filter


    【解决方案1】:

    class Zamowienie 没有定义 def __str____str__ 用作 ModelChoiceFilter 选项的默认表示形式。

    您还使用了.values_list('zam_kontrahent_fk', flat=True),这可能会消除 django-filter 调用__str__ 的能力。

    【讨论】:

    • 我定义了def __str__,忘记添加了,我会评论我的问题。当我删除.values_list('zam_kontrahent_fk', flat=True) 它只显示__str__Zamówienie 但我只需要zam_kontrahent_fk 的值,而不是__str__
    • 我不知道为什么我不直接打电话给queryset=Kontrahent.objects.all(),而是尝试使用foreign_key。您的回复帮助我弄清楚了,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-05
    • 1970-01-01
    • 1970-01-01
    • 2015-07-08
    • 1970-01-01
    • 2022-10-08
    • 1970-01-01
    相关资源
    最近更新 更多