Верните поле, переведя на код языка, который указан в URL с помощью Django - PullRequest
0 голосов
/ 29 января 2019

Моя модель:

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

Теперь мой результат: enter image description here

, когда я фильтрую с использованием испанского, мое имя (английский) должно переводитьсяИспанский, как показано ниже, и вернуть результат без изменения базы данных.Как этого добиться с помощью Django?

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

1 Ответ

0 голосов
/ 29 января 2019

Чтобы получить только нужные связанные записи, вы можете указать список полей для возврата:

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

Это даст вам словарь с указанными именами полей в качестве ключей, и он будет включать толькоncode из фильтра запросов.

Не знаю, как и как values() будет работать в контексте сериализатора модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...