django - 通过翻译为使用 Django 在 url 中指定的语言代码返回字段
问题描述
我的模型:
class Languages(models.Model):
code = models.CharField(max_length=2)
name = models.CharField(max_length=50)
class Translate(models.Model):
lang_code = models.ForeignKey(Languages,related_name = 'translate', on_delete=models.CASCADE)
ncode = models.CharField(max_length=2)
name = models.CharField(max_length=50)
我的观点:
class Languages_List(mixins.ListModelMixin):
queryset = Languages.objects.all()
serializer_class = LanguagesSerializer
def get_queryset(self):
queryset = Languages.objects.all()
lang = self.request.query_params.get('ncode',None)
queryset = queryset.filter(translate__ncode=lang)
return queryset
我的序列化器:
class LanguagesSerializer(QueryFieldsMixin,serializers.ModelSerializer):
class Meta:
model = Languages
fields = ('id', 'code','name')
我可以通过使用西班牙语翻译过滤我的嵌套字段来返回结果。我的 url 看起来像:
GET /lang/?ncode=sp
当我使用西班牙语进行过滤时,我的名字(英语)应该翻译成西班牙语,如下所示,并在不更改数据库的情况下返回结果。如何使用 Django 实现这一点?
{
"id": 4,
"code": "en",
"name": "Inglés",
}
解决方案
要仅获取所需的相关记录,您可以指定要返回的字段列表:
queryset = Languages.objects.filter(translate__ncode=lang).values(
'id',
'code',
'name',
'translate__ncode',
'translate__name'
)
这将为您提供一个以指定字段名称作为键的字典,并且它只包含来自查询过滤器的 ncode。
不知道是否以及如何values()
在模型序列化程序的上下文中工作。
推荐阅读
- python - 用逗号连接字符串并在每个元素周围加上引号
- mysql - 如何使用临时表中的列进行 MSQL 中的以下更新
- kotlin - Kotlin 中的 HelloWorld 给出错误“找不到或加载主类”
- javascript - 我可以在 Angularfire 中有 2 个数据库引用吗
- wordpress - 帖子类型中的事件日期
- javascript - 条件为假,但仍执行
- c - 如何以最简单的方式使用 scanf() 引入多个字符串?
- rest - Netsuite - REST API - 使用基于令牌的身份验证 (TBA) 进行查询 - (在 Python 中)
- azure - 使用哪些 azure 服务来通知某事已完成?
- sql - 我需要从表中已检索到的列中检索一列