dabapps / django-readers

A lightweight function-oriented toolkit for better organisation of business logic and efficient selection and projection of data in Django projects.

Home Page:https://www.django-readers.org

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Accessing local fields using qs.select_related_fields causes a confusing error

jordaneb opened this issue · comments

I accidentally misused this like qs.select_related before realising I was using the wrong function but the error I received was a bit confusing.

I was calling this with something like qs.select_related_fields('author') but this line

select_related(*{field.rpartition(LOOKUP_SEP)[0] for field in fields}),
calls rpartition() on it which splits on __. If there are no __ sequences found in the string then you end up with a tuple like ['', '', 'author'] and only the first field is used so the args passed down into the ORM produce an error along the lines of Field '' is not valid on model x.

I reckon the solution would be to iterate over fields and raise a ValueError with the names of any fields which don't contain the __ sequence in them with an error message that probably suggests that maybe qs.select_related is what the user intended to use