deschler / django-modeltranslation

Translates Django models using a registration approach.
BSD 3-Clause "New" or "Revised" License
1.34k stars 257 forks source link

Support for Subquery #702

Open mick88 opened 9 months ago

mick88 commented 9 months ago

I have the followinmg subquery that should annotate a user with their team name:

Subquery(Team.objects.filter(users__pk=OuterRef('pk')).order_by('order').values_list('name', flat=True)[:1])

However, this code fails for non-default locale because modeltranslation replaces values_list('name', flat=True) internally with values_list('name_en', 'name_es', flat=True)

This results in the following error when trying to annotate a queryset:

django.core.exceptions.FieldError: Cannot resolve expression type, unknown output_field

Defining output_field makes the error clearer:

django.db.utils.ProgrammingError: subquery must return only one column

last-partizan commented 9 months ago

Hi, thanks for reporting.

If you can, please try to dig this issue further and make PR with a fix.

roboxdev commented 4 months ago

I've faced the same issue.

celyes commented 2 months ago

Any solutions to this problem? any workarounds? @mick88 I'm facing the same issue

mick88 commented 2 months ago

No @celyes, I don't understand the code of this library well enough to contribute. I worked around the issue by not using a Subquery for now.

celyes commented 2 months ago

@mick88 that's a choice that I cannot make on my current project. The project I'm working on relies heavily on advanced features of the ORM so I'll either have to find a workaround or just ditch the library in favor of another one. Anyway, thanks for your reply. I appreciate it!