我正在使用Django REST 框架和Django-hvad应用程序为基于 Django 的网站实现 REST API。
问题:REST Viewset 中的翻译字段导致错误。
请注意: 另一个问题解决并解决了类似的问题,但不适用于我安装的应用程序版本,即:
- 姜戈1.8
- hvad 1.2.0 具有(或者更确切地说声称具有)对 REST 框架的内置支持,如此处所述
- Django 休息框架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/
给出了恼人的错误:
/it/api/v1/websites/ 上的 WrongManager 要访问未翻译模型中的“url”等已翻译字段,您必须使用翻译感知管理器。对于不可翻译的模型,您可以使用 hvad.utils.get_translation_aware_manager 获得一个。对于可翻译模型,使用 language() 方法。
注意:用/it
任何其他语言代码替换前缀没有任何帮助。
到目前为止我已经尝试过:
- 在
WebsiteViewSet
类中,为函数指定一个固定参数language()
。 - 使用TranslationMixin(一种与语言无关的序列化程序,公开所有翻译),按照此处的说明进行操作。我像这样更改了查询集行:
queryset = Website.objects.untranslated().prefetch_related('translations').all()
- 将 api url 定义移到 i18n 模式之外
但在所有情况下,它总是给出相同的错误。
我错过了什么?