gpt4 book ai didi

django - 使用 django_filter 过滤模型的计算方法

转载 作者:行者123 更新时间:2023-12-03 21:35:18 26 4
gpt4 key购买 nike

我有一个带有计算字段的 Django 模型。举个例子:

class MyModel(models.Model):
number = models.IntegerField(default=3)

@property
def incremented(self):
return self.number + 1

我想过滤这个属性,所以我尝试了以下方法:
class ModelFilter(django_filter.FilterSet):
class Meta:
model = MyModel
fields = ('incremented',)

那没有用,这也没有用:
class ModelFilter(django_filter.FilterSet):
incremented = django_filter.NumberFilter(lookup_type='exact')
class Meta:
model = MyModel
fields = ('incremented',)

我在这里做错了什么?

最佳答案

incremented不是该模型上的字段(即 Field 的实例),它只是一个 python 函数。在数据库方面,它不存在,因此无法过滤。

直到 #14030已修复,您无法轻松过滤这样的计算值,您必须使用 extra .因此,例如获取所有带有 number 的对象共 2 个通过 incremented :

MyModel.objects.extra(where=['number + 1 = %s'], params=[3])

将其与 django-filter 一起使用库,您需要覆盖 action您的 Filter :
def action(query, value):
return query.extra(where=['number + 1 = %s'], params=[value])

class F(django_filters.FilterSet):
incremented = django_filters.NumberFilter(action=action)
class Meta:
model = MyModel
fields = ['incremented']

关于django - 使用 django_filter 过滤模型的计算方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24705610/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com