Django modeltranslation for AJAX request

161 Views Asked by At

I have installed the Django modeltranslation package and almost everything works fine...

The only thing that doesn't are the AJAX requests, whose JsonResponses are still coming back in the original language. I couldn't find in the docs how to fix it.

I'm using the 'django.middleware.locale.LocaleMiddleware' middleware, so the LANGUAGE_CODE selection should be based on data from the request (i.e. the user's browser settings). Apparently, AJAX requests are not getting the memo.

Is there a way to let the server knows the LANGUAGE_CODE incoming from an AJAX request (other than hard coding it in the URL)?

1

There are 1 best solutions below

0
On BEST ANSWER

I got the answer at the Django Forums ^_^

I was told to look into the XHR request for the Content-Language parameter (I didn’t even know the XHR had a language parameter). That's when I saw that the Content-Language was correctly defined.

So the AJAX was a red herring.

Here’s how my view looked like:

obj_list = list(self.object_list.values('fk__name', 'data'))
return JsonResponse({'chart_data': obj_list})

The issue was the values method. When one uses it, the fields created by django-modeltranslation are not used.

I switched it up for these:

return JsonResponse(
      {
          "chart_data": [
              {"fk__name": o.fk.name, "data": o.data}
              for o in self.object_list.select_related('fk')
          ]
      }
)

Don't know if the list comprehension is a best practice, but everything works now!