django - A model with a defined field throws an AttributeError when accessing it -
i have django 1.5 app custom user model. has following field (among bunch of others):
class user(models.model): ... reporting_period = models.charfield( max_length=20, choices=reporting_periods, null=true, blank=true, default=none ) company = models.foreignkey( company, null=true, blank=true, default=none ) this model has following function defined:
def get_reporting_period(self, company_reporting_period=none): if not self.reporting_period: if not hasattr(self, '_company_reporting_period'): if company_reporting_period: self._company_reporting_period = company_reporting_period else: self._company_reporting_period = self.company.reporting_period return self._company_reporting_period else: return self.reporting_period occasionally, get_reporting_period function throws attributeerror ('user' object has no attribute 'reporting_period') on line if not self.reporting_period:. scratching head how possible.
self user instance, , therefore should have reporting_period @ times. there times during model instance's lifetime in django when field not accessible property?
unfortunately, issue happens in production environment unable debug it.
field attributes on instances not defined until __init__ method of model class called. trying access field attribute in custom __init__ method before calling super method result in attributeerror.
otherwise must've accidentally deleted attribute on instance.
i believe 2 instances when field attribute not defined on model instance.
edit: i've done small test, , unpickling preserves attributes of original version of model, new methods carry on recreated model. able call new get_reporting_period function, raise attributeerror when trying access undefined reporting_period attribute.
that means in case should invalidate cached entries after adding new field. however, there plenty of serialization methods not result in such error. take @ answer this question way serialize models without problem.
Comments
Post a Comment