django除了內建的各種lookup操作符之外,還可以自定義自己的lookup操作符。
官方文件的例子:
自定義乙個「不等於「的操作符
author.objects.filter(name__ne='jack')
from django.db.models import lookup
from django.db.models.fields import field
@field.register_lookup
class
notequal
(lookup):
lookup_name = 'ne'
defas_sql
(self, compiler, connection):
lhs, lhs_params = self.process_lhs(compiler, connection)
rhs, rhs_params = self.process_rhs(compiler, connection)
params = lhs_params + rhs_params
return
'%s <> %s' % (lhs, rhs), params
這樣我們就能在所有的field中用foo_ne操作符了。
lookup_name是操作符名字
必須要包含乙個as_sql方法
compiler 和 connection 不用管
lhs,rhs代表左手邊(left-hand side)和右手邊( right-hand side),夠直白。
也就是過濾表示式的」=」左右兩邊的引數。
return 就是最終生成的sql語句的表示式
下面是我寫的乙個測試例子,按位與的操作
from django.db.models import lookup
from django.db.models.fields import field
@field.register_lookup
class
bitand
(lookup):
lookup_name = 'bitand'
defas_sql
(self, compiler, connection):
lhs, lhs_params = self.process_lhs(compiler, connection)
rhs, rhs_params = self.process_rhs(compiler, connection)
params = lhs_params + rhs_params
return
'(%s & (1<<%s)) != 0' % (lhs, rhs), params
歡迎使用CSDN markdow
本markdown編輯器使用stackedit修改而來,用它寫部落格,將會帶來全新的體驗哦 markdown 是一種輕量級標記語言,它允許人們使用易讀易寫的純文字格式編寫文件,然後轉換成格式豐富的html頁面。維基百科 使用簡單的符號標識不同的標題,將某些文字標記為粗體或者斜體,建立乙個鏈結等,詳細...
歡迎毛毛與妞妞使用CSDN markdown編輯器
建立乙個自定義列表 如何建立乙個註腳 注釋也是必不可少的 katex數學公式 新的甘特圖功能,豐富你的文章 uml 圖表 flowchart流程圖 匯出與匯入 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下mar...
歡迎使用CSDN markdow1n編輯器
本markdown編輯器使用stackedit修改而來,用它寫部落格,將會帶來全新的體驗哦 markdown 是一種輕量級標記語言,它允許人們使用易讀易寫的純文字格式編寫文件,然後轉換成格式豐富的html頁面。維基百科 使用簡單的符號標識不同的標題,將某些文字標記為粗體或者斜體,建立乙個鏈結等,詳細...