How to avoid brackets in SQL around Django custom database function call? How to avoid brackets in SQL around Django custom database function call? postgresql postgresql

How to avoid brackets in SQL around Django custom database function call?


I've managed to get (more or less) what you need using following:

from django.db.models.lookups import BuiltinLookupfrom django.db.models.fields import Fieldclass Any(BuiltinLookup):    lookup_name = 'any'    def get_rhs_op(self, connection, rhs):       return " = ANY(%s)" % (rhs,)Field.register_lookup(Any)

and query:

Vehicle.objects.filter(make__any=F('dealer__make_list')).count()

as result:

SELECT COUNT(*) AS "__count" FROM "zz_vehicle"  INNER JOIN "zz_dealer" ON ("zz_vehicle"."dealer_id" = "zz_dealer"."id")    WHERE "zz_vehicle"."make"  = ANY(("zz_dealer"."make_list"))

btw. instead djorm_pgarray and TextArrayField you can use native django:

make_list = ArrayField(models.CharField(max_length=200), blank=True)

(to simplify your dependencies)