歡迎使用CSDN markdown編輯器

2021-07-28 11:20:40 字數 1415 閱讀 5300

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頁面。維基百科 使用簡單的符號標識不同的標題,將某些文字標記為粗體或者斜體,建立乙個鏈結等,詳細...