首页 > 解决方案 > 通过翻译为使用 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",
}

标签: djangodjango-modelsdjango-rest-frameworkdjango-viewsdjango-serializer

解决方案


要仅获取所需的相关记录,您可以指定要返回的字段列表:

queryset = Languages.objects.filter(translate__ncode=lang).values(
        'id', 
        'code', 
        'name',
        'translate__ncode',
        'translate__name'
        )

这将为您提供一个以指定字段名称作为键的字典,并且它只包含来自查询过滤器的 ncode。

不知道是否以及如何values()在模型序列化程序的上下文中工作。


推荐阅读