我正在使用Django REST framework和Django-hvad应用为基于Django的网站实施REST API。
问题:REST视图集中的已翻译字段会导致错误。
请注意: another question已解决&解决了类似的问题,但它不适用于我安装的应用版本 是:
- Django 1.8
- hvad 1.2.0 ,其中包含声明以内置对REST框架的支持,as explained here
- 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 / websites /访问翻译的字段,如 '网址'从未翻译的模型中,您必须使用翻译意识 经理。对于不可翻译的模型,您可以使用 hvad.utils.get_translation_aware_manager。对于可翻译模型,请使用 language()方法。
注意:用任何其他语言代码替换/it
前缀并不会有任何帮助。
到目前为止我已尝试过:
WebsiteViewSet
类中,指定language()
函数的固定参数。queryset = Website.objects.untranslated().prefetch_related('translations').all()
但在所有情况下,它总是会产生同样的错误。
我错过了什么?