HStoreField is a flat string→string map.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | # ====================================================================== # `HStoreField` is a flat string→string map. Query a key directly # (`labels__env`), check a key exists (`__has_key`), or test containment # (`__contains`). Requires the `hstore` extension (enabled in migration 0001). # ====================================================================== # ---------------------------------------------------------------------- # labels.env = 'prod' # ---------------------------------------------------------------------- # Django: Server.objects.filter(labels__env="prod") # SQL: # SELECT "examples_server"."id", "examples_server"."hostname", "examples_server"."labels" # FROM "examples_server" # WHERE ("examples_server"."labels" -> 'env') = 'prod' # Result: # web-1 # ---------------------------------------------------------------------- # labels has_key 'region' # ---------------------------------------------------------------------- # Django: Server.objects.filter(labels__has_key="region") # SQL: # SELECT "examples_server"."id", "examples_server"."hostname", "examples_server"."labels" # FROM "examples_server" # WHERE "examples_server"."labels" ? 'region' # Result: # web-1 # web-2 # ---------------------------------------------------------------------- # labels contains {'env': 'staging'} # ---------------------------------------------------------------------- # Django: Server.objects.filter(labels__contains={"env": "staging"}) # SQL: # SELECT "examples_server"."id", "examples_server"."hostname", "examples_server"."labels" # FROM "examples_server" # WHERE "examples_server"."labels" @> '"env"=>"staging"'::hstore # Result: # web-2 |