如何在Django中使用多语言API的tastypie?
我正在使用django transmeta对我的模型进行内部化。它工作得很好。它将模型保存到数据库中,如下所示:如何在Django中使用多语言API的tastypie?,django,tastypie,Django,Tastypie,我正在使用django transmeta对我的模型进行内部化。它工作得很好。它将模型保存到数据库中,如下所示: name_en, name_de, name_tr ... 因此,当您需要object.name时,它将返回当前语言环境中的名称,这对我的任务非常有用 我正在为RESTful API使用tastypie。tastypi返回表的所有列(name_en、name_de、name_tr)。我想要的是,提出如下请求: 所以服务器应该只响应英文名称(而不是name_en、name_de、n
name_en, name_de, name_tr ...
因此,当您需要object.name时,它将返回当前语言环境中的名称,这对我的任务非常有用
我正在为RESTful API使用tastypie。tastypi返回表的所有列(name_en、name_de、name_tr)。我想要的是,提出如下请求:
所以服务器应该只响应英文名称(而不是name_en、name_de、name_tr)
我该怎么做?什么样的tastypie功能,定制可以处理这个问题
更新:
def dehydrate_title(self, bundle):
return bundle.data['title'].upper()
类似的东西可以解决问题吗?下面的模型解决了我的问题。谢谢kgr
from tastypie.resources import ModelResource
from padmenu.item.models import Item
from django.utils.translation import activate
from tastypie import fields
class ItemResource(ModelResource):
name = fields.CharField()
description = fields.CharField()
class Meta:
queryset = Item.objects.all()
resource_name = 'item'
excludes = ['name_tr', 'name_de', 'name_en', 'description_tr', 'description_de', 'description_en']
def dehydrate(self, bundle):
lang = str(bundle.request.GET.get('lang'))
activate(lang)
bundle.data['name'] = bundle.obj.name
bundle.data['description'] = bundle.obj.description
return bundle
我也遇到过同样的问题,但我用另一种方式解决了它:
######## settings.py #########
gettext = lambda s: s
LANGUAGES = (
('uk', gettext('Ukrainian')),
('ru', gettext('Russian')),
('en', gettext('English')),
)
######## api.py #########
exclude_fields = set('_' + lang[0] for lang in settings.LANGUAGES)
class MyModelResource(ModelResource):
class Meta:
cls = MyModel
queryset = cls.objects.all()
resource_name = 'mymodel'
excludes = [field for field in cls._meta.get_all_field_names() if field[-3:] in exclude_fields]
当前语言由“django.middleware.locale.localemidleware”处理,因此不需要手动激活它。是的,您可以使用ModelResource,但可以显式定义字段,例如,名称而不是名称。然后使用deterheate_name或直接使用deterheate从数据库中检索适当的值。lang关键字可以在确定格式的地方使用。您可能希望查看tastypie.resources的源代码以获取想法,但这是可行的。祝你好运