It is logical that if the model is scaled, its local coordinates are scaled too. More, some models are created with Y-up coordinates, while Panda uses Z-up by default. Moving/rotating other nodes relative to such model becomes real mess.
The far better way is to create another model_parent nodepath and reparent the model to it. Then you can move/rotate this model_parent to place the model accurately. If you need to do anything relative to the model, just do it relative to model_parent instead.
The best way is not to scale your model at all. It’s a performance benefit if you don’t. Either scale it right in the modeling program, but you can also call flattenStrong after you loaded and scaled it.
model = loader.loadModel(yadda yadda)
model.setScale(.1)
model.flattenLight()
flattenLight applies the transform to the vertices, so you will afterwards be able to do setPos fine.
flattenStrong does a lot more than flattenLight, it also tries to merge all the nodes into one. If it’s a static model, it sure can be a good idea to call first clearModelNodes and then flattenStrong on the model as performance optimization.
It works with actors, just there are some nuances. Flattening actors: discourse.panda3d.org/viewtopic.php?t=4678
Also, be careful when you use flattening in real-time. It takes quite some time to call flattenStrong().