2010-09-13 8 views
5

Después de tratar de hacer funcionar esto por un tiempo y buscar Estoy realmente perplejo, así que estoy publicando aquí ... Quiero hacer algunas funciones en las clases que estoy escribiendo para django tan genérico como sea posible, así que quiero usar getattr para llamar a funciones tales como la de abajo de una manera genérica:Python, Django, ¿cómo se usa getattr (u otro método) para llamar al objeto que tiene múltiples atributos?

la manera de hacerlo que funciona (de manera no genérico):

from django.db.models import get_model 
mymodel = get_model('appname', 'modelname') 
dbobject = mymodel.objects.all() 

uno de mis intentos de crear esto de una manera genérica, siendo no funciona, devuelve algo pero no es el tipo de objeto adecuado para que pueda obtener los datos de él (es una llamada a la base de datos para django)

ret = getattr(mymodel,'objects') 
dbobject = getattr(ret,'all') 

Respuesta

12

Ha olvidado llamar el resultado.

dbobject = mymodel.objects.all() 

Accede al método mymodel.objects.all y luego lo llama.

ret = getattr(mymodel,'objects') 
self.dbobject = getattr(ret,'all') 

tiene acceso al método mymodel.objects.all pero no lo llama.

Todo lo que necesita es cambiar la última línea a:

self.dbobject = getattr(ret,'all')() 
+0

gracias .. ok Ahora lo entiendo .. Había intentado hacer algo como esto antes, pero estaba poniendo todo en una sola llamada getattr, entiendo ahora que estoy simplemente llamando el 'todo' con parte el resto de la "parte precedente" como el objeto en el getattr, por lo que debe hacerse por separado, gracias por aclarar esto ... pensé que podría hacer: dbobject = getattr (model, 'objects.all')() pero esto no estaba funcionando, así que este tipo de me confundió a partir de ahí – Rick

2

Tendrá que llamada el atributo si se trata de una función, por ejemplo,

ret = getattr(mymodel,'objects') 
all = getattr(ret,'all') 
self.dbobject = all() 
Cuestiones relacionadas