0

我正在尝试制作一个 FormFilter。

我的模型中有类似的东西:

class TabelaPreco(models.Model):
    [...]

class TabelaPrecoItem(models.Model):
    [...]
    preco = models.FloatField()
    tabela_preco = models.ForeignKey('TabelaPreco', on_delete=models.CASCADE, related_name='itens')

.

我的表单过滤器:

class TabelaItemProdutosFilter(django_filters.FilterSet):
    preco__gte = django_filters.NumberFilter(lookup_expr='gte')
    preco__lte = django_filters.NumberFilter(lookup_expr='lte')

    class Meta:
        model = TabelaPrecoItem
        fields = ['preco__gte', 'preco__lte']

当我填写输入并搜索时,出现以下错误: FloatField 的不支持查找“gte”或不允许加入该字段。

我没有找到任何可以帮助我的东西。我已经尝试使用 NumericRangeField,但我不知道如何将它放入模板上的 2 个不同输入中。

. .

编辑:我认为问题出在我的查询集中。我改变了我上面的模型。

form_filter = TabelaItemProdutosFilter(request.GET, queryset=tabela_preco.itens.select_related('produto', 'produto__modelo').filter(produto__saldo__gt=0).order_by('-produto__codigo'))

其中 tabela_preco 是我的模型 TabelaPreco 的对象

4

1 回答 1

0

我确信您可以在 FloatFields 上使用__gte和过滤。__lte我不知道“不允许加入该领域”的另一种可能性是什么意思。我通常使用更强大的表示来编码我的过滤器字段,例如

fields = {
    'desc__ft':['gte','lte','exact'],
    ...
}

ft这会在通过外键字段访问的对象的 Float 字段上产生三个过滤器desc

声明性过滤器和条目是否fields相互排斥?您似乎在告诉它以两种不同的方式创建相同的两个过滤器。

于 2019-09-26T15:35:26.893 回答