Hi, I have a person model that contains date_of_birth and also a calculated @property ‘age’.
Is it possible to use the age property in django-filter? I’ve established that I cannot simply add age to the Meta fields TypeError: 'Meta.fields' must not contain non-model field names: age
and defining age as follows doesn’t work either…
age = filters.NumberFilter(field_name=person__age)
NameError: name 'person__age' is not defined
Any suggestions? Thanks
hi, the answer is no
.
What you have to do in this case is use annotations (look it up on the official docs).
1 Like
To add to the previous response - keep in mind that the ORM functions by building an SQL query that is sent to the database to be executed. Functions and properties in your Django models exist in Django, not in the database, so those features are not available to the database when making queries.
Having said that, PostgreSQL (and probably all the other supported databases) have a sufficiently robust query language such that most expressions you would create as properties in Django could be written as part of a query. That’s where the annotations and Query expressions com into play.
2 Likes
Have you figured out the solution to this?
Yes - I had to change my approach and use annotations as advused by @plopidou