我使用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__
的能力。