Как я могу получить значение для поля не-ПК в FK? - PullRequest
0 голосов
/ 01 января 2019

Добрый вечер,

Я относительно знаком с Django, но не понимаю, как получить значение для другого поля, на которое ссылается внешний ключ.

Например, у меня естьмодель:

class Status(models.Model):
   status_text = models.CharField(max_length=20)
   status_open = models.BooleanField(default=1)

   def __str__(self):
      return self.status_text

 class Target(models.Model):
   last_name = models.CharField(max_length=40)
   first_name = models.CharField(max_length=40)
   status = models.ForeignKey(Status, on_delete=models.CASCADE)

Я хочу запросить его:

queryset = Target.objects.filter(status__status_open=1)

Когда я это сделаю, мне вернут pk (1,2,3 и т. д.) для поля состояния,Что я действительно хочу, так это status_text, который соответствует этому pk.

Я играл с select related, но он просто заявляет, что status_text не FK.

По сути, как мне смоделироватьзапрос как:

SELECT Target.last_name, Target.first_name, Status.status_text 
FROM Target, Status 
WHERE Target.status = Status.ID AND Status.status_open = 1;

Спасибо за вашу помощь.Я продолжаю бороться с ORM при использовании Django ...

РЕДАКТИРОВАТЬ: Добавление Serializer & views.py

class TargetSerializer(serializers.ModelSerializer):
    status_text = serializers.ReadOnlyField()

    class Meta:
        model = Target
        fields = ('last_name', 'first_name', 'status_text')

Views.py

class TargetList(generics.ListAPIView):
    queryset = Target.objects.filter(sir_status__status_open=1).values( 'last_name', 'first_name', 'sir_status__status_text')
    serializer_class = TargetSerializer

Мой вызов API возвращает данные без ошибок, но НЕ status_text.

Данные в таблице состояния - это просто pk ID (1,2,3) и строка ('Open', 'Closed')

Спасибо за вашу помощь.

1 Ответ

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

Использование values() метод

Target.objects.filter(status__status_open=1)<b>.values('last_name', 'first_name', 'status__status_text')</b>
...