docs: def pkeys(self,parent,field):
      "returns a list of pkey tuples by combining parent[field] with our attrs"
      template=[(parent[k] if k is not None else None) for k in self.pkey]
      inull=template.index(None)
      def mk(x):
        "helper for constructing pkey tuples in a list comp"
        template[inull]=x
        return tuple(template)
      val=parent[field]
      if self.getter is not None: return map(mk,self.getter(val))
      elif isinstance(val,VDList): return map(mk,val.generate())
      else: raise NotImplementedError(type(val))