On 3. Mar., 13:09 h., Bruno Desthuilliers <bruno. 42.desthuilli...@websiteburo.invalid> wrote: > gentlestone a écrit : > > > > > Hi, is there some well-known problems with class method monkey > > patching? > > > I've got this error message: > > > unbound method get_pocet_neocislovanych() must be called with Pozemok > > instance as first argument (got Subjekt instance instead) > > The method is declared as: > > @classmethod > > @monkeypatch(Dokument) > > def get_pocet_neocislovanych(cls, subjekt): > > return cls.objects.filter(subjekt = subjekt, cislo__isnull = > > True).count() # or pass, this line is not important > > > and the monkey patch decorator is declared as: > > def monkeypatch(cls): > > def decorator(func): > > setattr(cls, func.__name__, func) > > return func > > return decorator > > The decorators are applied in order. So you first add the yet > undecorated function as an attribute of the class, then pass the > function to classmethod. > > FWIW, this monkeypatch decorator is IMHO a plain waste of time. The > following code does the same thing and is (IMHO again) *much* more readable: > > def get_pocet_neocislovanych(cls, subjekt): > return cls.objects.filter( > subjekt=subjekt, > cislo__isnull= True > ).count() # or pass, this line is not important > > dokument.get_pocet_neocislovany...@classmethod(get_pocet_neocislovanych) > > Also, Django's BestPractice(tm) is to define such "query" methods on the > model's manager, not as a classmethod of the model. > > My 2 cents
thx, I changed my definitions to manager style and have no more problems seems to be safe to use manager instead classmethod - do not know why :-) -- http://mail.python.org/mailman/listinfo/python-list