Django REST Framework无法显示可翻译的字段

时间:2015-04-10 06:36:33

标签: python django internationalization django-rest-framework django-hvad

我正在使用Django REST frameworkDjango-hvad应用为基于Django的网站实施REST API。

问题:REST视图集中的已翻译字段会导致错误。

  

请注意: another question已解决&解决了类似的问题,但它不适用于我安装的应用版本   是:

     
      
  1. Django 1.8
  2.   
  3. hvad 1.2.0 ,其中包含声明以内置对REST框架的支持,as explained here
  4.   
  5. Django Rest Framework 3.1.1
  6.   

这是我的模特:

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前缀并不会有任何帮助。

到目前为止我已尝试过:

  1. WebsiteViewSet类中,指定language()函数的固定参数。
  2. 使用 TranslationMixin (与语言无关的序列化程序,公开所有翻译),按照说明here。我更改了queryset行,如下所示: queryset = Website.objects.untranslated().prefetch_related('translations').all()
  3. 将api url定义移到i18n模式之外
  4. 但在所有情况下,它总是会产生同样的错误。

    我错过了什么?

0 个答案:

没有答案