2016-11-17 63 views

回答

1

您可以使用extra添加自定義的,其中使用條件SQL函數:

Author.objects.extra(where=["lower(name) = lower(%s)"], params=['Fabio']) 

你想改用直接在查詢中嵌入的價值PARAMS通過讓Django的逃脫了PARAMS避免SQL注入您。

如果你能避免使用您傳遞(在我的例子「法比奧」)帕拉姆的SQL LOWER功能,那麼你可以使用annotate代替:

Author.objects.annotate(name_lower=Lower('name')).filter(name_lower=your_name.lower()) 

注意your_name.lower()使用蟒蛇lower功能,而不是SQL的。

我無法找到一個方法來一起使用註釋與F()Lower()from django.db.models.functions import Lower)申請Lower到您的自定義輸入,而不是另一個字段。

+0

是否可以從'SELECT'的字段中排除'name_lower'? – planetp

+0

@planetp你是什麼意思?如果使用'''extra'''示例,則不應該在查詢的SELECT 部分添加任何其他字段。註釋會選擇字段,雖然 –

+0

是的,'extra()'適合我。 'annotate()'把字段添加到'SELECT'列表中,這是不受歡迎的(我只想對錶達式進行過濾,而不是選擇它)。 – planetp

相關問題