具有以下模型:
class Project(models.Model):
...
name = models.CharField(max_lenght=70)
short_description = models.CharField(max_length=135)
description = models.CharField(max_lenght=25000)
...
我只想使用一个输入来按name
,short_description
和description
进行查找。
例如,如果我有以下数据:
object1:
name = "Amazing airplanes"
short_description = "This project wants to be ..."
description = "... ... ..."
object2:
name = "Testing potatoes as batteries"
short_description = "... ... ... "
description = "... this project ..."
object3:
name = "project creator"
short_description = "... ... ..."
description = "... ... ..."
我只用project
过滤过滤器的一个输入,因此必须得到三个对象。 (另外,如果一个对象在少数几个属性中具有相同的单词,则该对象只能返回一次)
我现在所拥有的是这个
class ProjectListFilter(django_filters.FilterSet):
name = django_filters.CharFilter(lookup_expr='icontains')
short_description = django_filters.CharFilter(lookup_expr='icontains')
description = django_filters.CharFilter(lookup_expr='icontains')
class Meta:
model = Project
fields = ['name', 'short_description', 'description']
queryset = Project.objects.all()
但这会生成3个输入,这是我要规避的。
答案 0 :(得分:0)
您应该为此编写一个自定义方法,选中docs,您的代码应如下所示:
class ProjectListFilter(django_filters.FilterSet):
name = django_filters.CharFilter(method='my_filter')
class Meta:
model = Project
fields = ['name', ]
def my_filter(self, queryset, name, value):
return queryset.filter(
name__icontains=value
) | queryset.filter(
short_description__icontains=value
) | queryset.filter(
description__icontains=value
)