首先,创建一个自定义查询器。在你的 Django 应用中创建一个新文件,比如 lookups.py:

from django.db.models import Lookup
from django.db.models.fields import Field

class OverlapLookup(Lookup):
    lookup_name = 'overlap'

    def as_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 f"EXISTS (SELECT 1 FROM unnest(string_to_array({lhs}, ',')) AS t(v) WHERE v = ANY(string_to_array({rhs}, ',')))", params

Field.register_lookup(OverlapLookup)

在你的应用的 apps.py 文件中导入这个自定义查询器:

from django.apps import AppConfig

class YourAppConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'your_app'

    def ready(self):
        import your_app.lookups  # 导入自定义查询器

在视图或其他地方使用查询:

qs = YourModel.objects.filter(a__overlap="3,44,66")