2010-09-13 10 views
5

Dopo aver provato a farlo funzionare per un po 'e aver cercato in giro, sono davvero stordito quindi sto postando qui ... Voglio fare alcune funzioni nelle classi che sto scrivendo per django il più generico possibile, quindi voglio usare getattr per richiamare le funzioni, come quello qui sotto in modo generico:Python, Django, come usare getattr (o altro metodo) per chiamare l'oggetto che ha più attributi?

il modo in cui lo faccio che funziona (modo non generico):

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

uno dei miei tentativi di creare questa in modo generico, ancora non funziona, restituisce qualcosa ma non è il tipo di oggetto corretto in modo da poter ottenere i dati da esso (è una chiamata di database per django)

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

risposta

12

Hai dimenticato di chiamare il risultato.

dbobject = mymodel.objects.all() 

Accede al metodo mymodel.objects.all e quindi lo chiama.

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

accessi il metodo mymodel.objects.all ma non lo chiamano.

Tutto ciò che serve è quello di modificare l'ultima riga a:

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

grazie .. ok ho capito ora .. avevo provato a fare qualcosa di simile prima, ma stava mettendo tutto in una sola chiamata getattr, capisco ora che sto solo chiamando la parte 'tutti' con il resto della "parte precedente" come l'oggetto nel getattr, quindi deve essere fatto separatamente, grazie per averlo chiarito ... avevo pensato che potevo fare: dbobject = getattr (model, 'objects.all')() ma questo non funzionava, quindi questo tipo di mi ha confuso da lì – Rick

2

Sarà necessario chiamata l'attributo se si tratta di una funzione, ad esempio,

Problemi correlati