Djang_filter改变标签,如何找出默认的过滤器类型



我使用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的列表(表foreign_keyis中的1而不是"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列表吗?

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

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

最新更新