0

我正在使用Django REST 框架Django-hvad应用程序为基于 Django 的网站实现 REST API。

问题:REST Viewset 中的翻译字段导致错误。

请注意: 另一个问题解决并解决了类似的问题,但不适用于我安装的应用程序版本,即:

  1. 姜戈1.8
  2. hvad 1.2.0 具有(或者更确切地说声称具有)对 REST 框架的内置支持,如此处所述
  3. 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任何其他语言代码替换前缀没有任何帮助。

到目前为止我已经尝试过:

  1. WebsiteViewSet类中,为函数指定一个固定参数 language()
  2. 使用TranslationMixin(一种与语言无关的序列化程序,公开所有翻译),按照此处的说明进行操作。我像这样更改了查询集行: queryset = Website.objects.untranslated().prefetch_related('translations').all()
  3. 将 api url 定义移到 i18n 模式之外

但在所有情况下,它总是给出相同的错误。

我错过了什么?

4

0 回答 0