2012-04-10 18 views
0

Ich habe ein Modell wie dieseDjango: Methodenaufruf in django Modellen

class User(model): 
    username = XXX 
    addr1 = xxx 

def get_username(self): 
    return self.username + 'some message' 

def get_addr1(self): 
    return self.addr1 + 'some string' 

und Code, den ich durch die einzelne Objekte zu durchlaufen will, und wenn die Funktion mit get_ + field.name dann dieser Methode existiert nennen, sonst kehrt die Feld selbst.

Gibt es eine Möglichkeit, dies zu tun? Im Folgenden finden Sie Pseudocode:

for field in each_obj._fields.itervalues(): 
    if get_+fieldname exists then: 
     return that function call 
    else: 
     return self.field.name 

Antwort

0

Sie hasattr(obj, 'get_'+fieldname) wissen, ob die Methode dort anrufen können, aber das Beste, was zu tun ist eigentlich __getattr__ in Ihrer Klasse außer Kraft zu setzen und nur Python lassen den Rest.

0
for var in obj.__dict__: 
    try: 
     print getattr(obj, 'get_%s' %var)() 
    except(AttributeError): 
     print var 
Verwandte Themen