【问题标题】:Return the field by translating to language code which is specified in the url using Django通过翻译为使用 Django 在 url 中指定的语言代码返回字段
【发布时间】:2019-06-22 04:28:51
【问题描述】:

我的模特:

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')

我可以通过使用西班牙语翻译过滤我的嵌套字段来返回结果。我的网址看起来像:

GET /lang/?ncode=sp

现在我的结果是:

当我使用西班牙语进行过滤时,我的名字(英语)应该翻译成西班牙语,如下所示,并在不更改数据库的情况下返回结果。如何使用 Django 实现这一点?

{
  "id": 4,
  "code": "en",
  "name": "Inglés",
}

【问题讨论】:

    标签: django django-models django-rest-framework django-views django-serializer


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-12-26
      • 1970-01-01
      • 2015-04-24
      • 2019-09-22
      • 1970-01-01
      • 2014-12-20
      • 2015-12-31
      • 2014-12-21
      • 1970-01-01
      相关资源
      最近更新 更多