Thursday, June 30, 2011

Re: Deferred fields

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.livneh@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+unsubscribe@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+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/django-users?hl=en.

No comments:

Post a Comment