Django reverse to contains/icontains

前端 未结 4 1766
星月不相逢
星月不相逢 2021-01-04 06:11

In this question was solved problem for reverse LIKE operation in SQL, for example if field name is \"Peter Johnson\", we could find it by such query:



        
4条回答
  •  粉色の甜心
    2021-01-04 06:47

    While extras do provide an expanded complex functionality for edge cases, extras should be treated as last resort and likely going to be deprecated at some point.

    This can be accomplished using annotate and filtering.

    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'))
    

    Genericized:

    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))
    

提交回复
热议问题