Help with implementing calculated fields (#28822)

81 views
Skip to first unread message

Tobias Bengfort

unread,
Mar 14, 2021, 9:16:15 AM3/14/21
to django-d...@googlegroups.com
Hi,

a while back there has been a discussion about calculated model fields:

https://groups.google.com/g/django-developers/c/ADSuUUuZp3Q/m/5o02Lp_jCwAJ

The main benefit would be that these would be available in cases where
annotations are currently not available, e.g. related queries or admin
lists (see #14336).

Note that the topic of fields that have both a DB and python
implementation was discussed and the consensus was that the python
equivalents could be added by a separate library, if required. So I am
only talking about the database part here.

The linked discussion was mainly about *what* is desired, not *how* it
could be done. I also noticed that the fellows did not participate in
that discussion.

I would like to have a shot at this topic. So I am interested in:

- Do you think this is even possible/worth the effort?
- How could this be implemented and what would be potential challenges?
- Is it possible to implement this in a third party library or does it
require changes to django itself?

I would probably start with a non-editable, non-concrete model field
(similar to GenericForeignKey or ForeignObjRel). But I have no clue yet
how to integrate that with QuerySet/Query.

thanks
tobias

schinckel

unread,
Mar 14, 2021, 11:49:18 PM3/14/21
to Django developers (Contributions to Django itself)
Hi Tobias.

I've done a bit of stuff on this, and found there were actually limited changes that need to be made to django to got this to work.


I haven't touched it much since then (although I'm keen to revisit it, actually), but it's actually possible that we can do it without any changes to Django.


Matt.

Tobias Bengfort

unread,
Mar 21, 2021, 2:06:00 PM3/21/21
to django-d...@googlegroups.com
Hi Matt,

sorry for the late reply. This is exactly what I was looking for!

However, if I understand correctly this is more a proof of concept and
not ready for production use. There still seem to be some subtlties that
need to be fixed:

- related queries with shared_property
- filtered aggregates (e.g. Max('name', filter=Q(…)) in related queries
with ComputedField (Q object would need similar processing to F objects)
- group_by with both implementations (I get "aggregate functions are not
allowed in the GROUP BY clause")

Other than that it is great to see this is possible as a third party
library. I am still not sure how much interest there actually is though.

tobias

PS: There is a small typo in the first link in your blog post.
> --
> You received this message because you are subscribed to the Google
> Groups "Django developers (Contributions to Django itself)" group.
> To unsubscribe from this group and stop receiving emails from it, send
> an email to django-develop...@googlegroups.com
> <mailto:django-develop...@googlegroups.com>.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/django-developers/8d325f4e-9c20-4268-9c46-6f682911ac5dn%40googlegroups.com
> <https://groups.google.com/d/msgid/django-developers/8d325f4e-9c20-4268-9c46-6f682911ac5dn%40googlegroups.com?utm_medium=email&utm_source=footer>.
Reply all
Reply to author
Forward
0 new messages