我正在使用django-hvad进行模型翻译,并非所有模型都有翻译。我希望默认值为en-us
。
如果针对特定语言发出请求,则如果模型具有该翻译,则响应应采用该语言。如果翻译不可用,我希望返回en-us
。
现在发生的事情是我收到错误500:'HttpResponse' object has no attribute '_meta'
。当翻译不可用以及未在LANGUAGES
中定义语言代码时,会发生这种情况。
例如,当我发出en-us
请求时,我收到状态为200的正确回复:
GET http://localhost:5000/survey/surveys/2/?language=en-us
如果我提出en-US
请求,则会收到500错误(请注意从en-us
到en-US
的上限更改):
GET http://localhost:5000/survey/surveys/2/?language=en-US
我在请求LANGUAGES
中定义但没有翻译的语言时遇到相同的500错误:
GET http://localhost:5000/survey/surveys/2/?language=af
这是我的settings.py文件的语言部分:
from django.utils.translation import ugettext_lazy as _
...
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
LANGUAGES = [
('en-us', _('English')),
('af', _('Afrikaans')),
('ar', _('Arabic')),
...
]
如果您想知道如何提供此请求,请点击该网址的视图:
class SurveyDetail(APIView):
def get_object(self, pk):
try:
user_language = self.request.GET.get('language')
return models.Survey.objects.language(user_language).get(pk=pk)
except models.Survey.DoesNotExist:
return HttpResponse(status=status.HTTP_404_NOT_FOUND)
def get_related_questions(self, pk):
try:
user_language = self.request.GET.get('language')
return models.SurveyQuestion.objects.language(user_language).all().filter(survey=pk)
except models.SurveyAnswer.DoesNotExist:
return HttpResponse(status=status.HTTP_404_NOT_FOUND)
def get_related_answers(self, pk):
try:
user_language = self.request.GET.get('language')
return models.SurveyAnswer.objects.language(user_language).all().filter(question=pk)
except models.SurveyAnswer.DoesNotExist:
return HttpResponse(status=status.HTTP_404_NOT_FOUND)
def get(self, request, pk, format=None):
survey = self.get_object(pk)
questions = self.get_related_questions(pk)
questions_serialized = []
for q in questions:
questions_serialized.append(SurveyQuestionSerializer(q).data)
questions_serialized[-1]['answers'] = SurveyAnswerSerializer(self.get_related_answers(q.pk), many=True).data
resp_obj = SurveySerializer(survey).data
resp_obj['questions'] = questions_serialized
return JSONResponse(resp_obj)
答案 0 :(得分:0)
https://github.com/KristianOellegaard/django-hvad/issues/136
class MyFallbackQueryset(FallbackQueryset):
translation_fallbacks = (None, 'en', 'de', 'fr')
class MyModel(TranslatableModel):
objects = TranslationManager(fallback_class=MyFallbackQueryset)
在评估查询时,将无解析为当前语言。不会重新排序,但由于查询的工作方式,使用相同的语言出现两次并不重要。 此外,现在可以以相同的方式覆盖默认查询集(在没有语言,未翻译,...时使用)。例如,只需传递default_class = MyFallbackQueryset即可。