如何获取fk中非pk字段的值?

时间:2019-01-01 04:31:21

标签: django django-rest-framework django-orm

晚上好

我对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等)。我真正想要的是与该pk相对应的status_text。

我一直在与select相关,但只声明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;

感谢您的帮助。在使用Django的过程中,我继续与ORM斗争...

编辑:添加序列化器和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)和一个字符串(“打开”,“关闭”)

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

使用values()方法

Target.objects.filter(status__status_open=1).values('last_name', 'first_name', 'status__status_text')