我需要按名字或姓氏搜索用户表过滤。
给定用户 John Doe Smith,其中 John 是名字,Doe Smith 是姓氏。
当我搜索 John Smith 时,它应该会找到上面的用户。
我知道这只是实现 this SO answer 的解决方案的问题,但我如何在 django-filter
中做到这一点并保留其他过滤器字段,如 email
或 phone
还 ?patient.py
(仅相关部分)
class Patient(TimeStampedModel):
name = models.CharField('Name', max_length=30)
last_name = models.CharField('Last Name', max_length=30)
phone = models.CharField('Phone', max_length=14)
最佳答案
我刚刚发现 method
参数是我要找的found here
基本上我的代码是这样结束的:
class PatientFilter(FilterSet):
name = CharFilter(name='name', lookup_expr='icontains')
last_name = CharFilter(name='last_name', lookup_expr='icontains')
phone = CharFilter(name='phone', lookup_expr='icontains')
full_name = CharFilter(name='full_name', method='search_by_full_name')
def search_by_full_name(self, qs, name, value):
for term in value.split():
qs = qs.filter(Q(name__icontains=term) | Q(last_name__icontains=term))
return qs
class Meta:
model = Patient
fields = ['name', 'last_name', 'phone']
关于python - 使用 django-filter 按名字或姓氏过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46009449/