Django REST Framework не может отображать переводимые поля
Я реализую REST API для сайта, основанного на Django, используя среду REST Django и приложения Django-hvad.
Проблема: переведенные поля в REST Viewset вызывают ошибку.
Обратите внимание: еще один вопрос адресован и решает аналогичную проблему, но она не относится к версиям приложения, которые я установил, а именно:
- Джанго 1,8
- hvad 1.2.0, который имеет или, скорее, заявляет, что имеет встроенную поддержку REST framework, как объяснено здесь
- Django Rest Framework 3.1.1
Вот моя модель:
class Website(TranslatableModel):
name = models.CharField(max_length=100,unique=True)
default_url = models.URLField(max_length=100,unique=True)
created = models.DateTimeField(auto_now_add=True)
translations = TranslatedFields(
url = models.URLField(max_length=100, unique=True),
description = models.TextField(null=True,blank=True),
)
И мой urls.py
выглядит так (для краткости я вывез импорт):
# Serializer
class WebsiteSerializer(HyperlinkedTranslatableModelSerializer):
class Meta:
model = Website
fields = ('name','default_url','url','description')
# Viewset
class WebsiteViewSet(viewsets.ModelViewSet):
queryset = Website.objects.language().all()
serializer_class = WebsiteSerializer
# REST Router
router = routers.DefaultRouter()
router.register(r'websites', WebsiteViewSet)
# URL Patterns
urlpatterns = patterns( '',
# ... non translated urls
)
urlpatterns += i18n_patterns('',
url(r'^api/v1/', include('rest_framework.urls', namespace='rest_framework')),
url(r'^api/v1/', include(router.urls)),
url(r'^admin/', include(admin.site.urls)),
)
С этим, URL /it/api/v1/websites/
выдаёт досадную ошибку:
WrongManager at / it / api / v1 / website / Чтобы получить доступ к переведенным полям, таким как 'url' из непереведенной модели, вы должны использовать менеджер с поддержкой перевода. Для непереводимых моделей вы можете получить один, используя hvad.utils.get_translation_aware_manager. Для переводимых моделей используйте метод language().
Примечание: замена /it
Префикс с любым другим языковым кодом никак не помогает.
Что я пробовал до сих пор:
- в
WebsiteViewSet
класс, указав фиксированный аргумент дляlanguage()
функция. - используя TranslationMixin (не зависящий от языка сериализатор, раскрывающий все переводы), следуя приведенным здесь инструкциям. Я изменил строку запроса так:
queryset = Website.objects.untranslated().prefetch_related('translations').all()
- перемещение определений URL-адресов API за пределы шаблонов i18n
Но во всех случаях это всегда дает одну и ту же ошибку.
Что мне не хватает?