Ser*_*rma 10 django django-models django-queryset
在这个问题中解决LIKE了SQL中反向操作的问题,例如,如果字段名称是"Peter Johnson",我们可以通过这样的查询找到它:
select name from user where "Mr. Peter Johnson" like CONCAT('%', name, '%')
Run Code Online (Sandbox Code Playgroud)
有没有办法在Django Q对象中做这样的事情(我正在构建一个大的查询,所以使用原始SQL查询将不合理)?
小智 11
虽然附加程序确实为边缘情况提供了扩展的复杂功能,但附加程序应被视为最后的手段,并且可能会在某些时候被弃用。
这可以使用注释和过滤来完成。
from django.db.models import F, Value, CharField
MyUserModel.objects \
.annotate(my_name_field=Value('Mr. Peter Johnson', output_field=CharField())) \
.filter(my_name_field__icontains=F('name'))
Run Code Online (Sandbox Code Playgroud)
泛化:
from django.db.models import F, Value, CharField
@staticmethod
def reverse_case_insensitive_contains(model, search_field_name: str, search_field_value: str):
return model.objects \
.annotate(search_field=Value(search_field_value, output_field=CharField())) \
.filter(search_field__icontains=F(search_field_name))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3515 次 |
| 最近记录: |