Use a property in combination with an ordinary null=True field. Always access it (from python or template code) via the property.
On Thu, Jun 30, 2011 at 4:13 PM, Ori <ori.liv...@gmail.com> wrote: > Hi, > > I'd like to defer calculating a value for a particular field until the > value is required. > > Suppose I have these models: > > class Fruit(models.Model): > # various fields > > class FruitBasket(models.Model): > fruit = models.ManyToManyField(Fruit) > > I'd like to add a "most_nutritious" field to FruitBasket that is a > ForeignKey to a fruit object, which will represent the most nutritious > fruit in the basket. But determining which fruit is the most > nutritious is expensive, so I'd like to only set a value for this if > it's required. But if I do compute a value, I want to store it in the > database so that I don't have to re-compute every time. > > Ideally, I'd like to do something like this: > > most_nutritious = models.LazyField(default=None, > compute=some_callable) > > Whenever a FruitBasket is loaded, if the raw value of > "most_nutritious" is None, some validator computes the identity of the > most nutritious fruit, saves it, and pretends the value was always > there. If it's not None, the validator just returns the value > unmodified. > > I think I'd know how to implement this if calculating the final value > did not depend on the value of other columns. My problem is that > to_python methods & co. are not (to my knowledge) given access to the > model instance being loaded/saved -- just the column value.) > > Any thoughts? > > Thanks! > Ori > > -- > You received this message because you are subscribed to the Google Groups > "Django users" group. > To post to this group, send email to django-users@googlegroups.com. > To unsubscribe from this group, send email to > django-users+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/django-users?hl=en. > > -- You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com. To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-users?hl=en.