如何在DRF中通过GET请求获得包括关系表的条目在内的数据。

问题描述 投票:0回答:1

我最近在尝试着做DRF,我的项目有下面这个问题要解决。

我有两个 型号

class JobsMaster(models.Model):
    job_id = models.CharField(max_length=128, unique=True)
    job_name = models.CharField(max_length=128)
    scheduled_time = models.CharField(max_length=128)
    args = models.TextField()
    interval = models.CharField(max_length=50)
    repeat = models.CharField(max_length=100)

class JobProcessDetails(models.Model):
    job_id = models.ForeignKey('JobsMaster')
    sequence = models.IntegerField()
    step_name = models.CharField(max_length=128)
    records = models.IntegerField(null=True,blank=True)
    created_by = models.CharField(max_length=155,default='system')
    created_on = models.DateTimeField(auto_now_add=True)

    class Meta:
        unique_together = (('job_id', 'sequence'),)

通讯员 序列器

class JobsMasterSerializer(serializers.ModelSerializer):

    class Meta:
        model = JobsMaster
        fields = '__all__'

class JobProcessDetailsSerializer(serializers.ModelSerializer):

    class Meta:
        model = JobProcessDetails
        fields = '__all__'

浏览次数

class JobsMasterViewSet(viewsets.ModelViewSet):

    queryset = JobsMaster.objects.all()
    serializer_class = JobsMasterSerializer
    filter_fields = ('job_id',)

class JobProcessDetailsViewSet(viewsets.ModelViewSet):
    queryset = JobProcessDetails.objects.all()
    serializer_class = JobProcessDetailsSerializer
    filter_fields = ('job_id','sequence',)

我不知道这是否是构建viewsets和serializer的正确方法,但它为我工作。

我想写一个GET请求,从UI中获取数据。JobProcessDetails 的数据,其中包括相关的 JobsMaster 表也是如此。

例如,响应数据应该包含以下字段。

    job_id : xxxxx
    sequence : xxxx
    step_name : 'xxxx'
    records : xxxx
    created_by : 'xxxxx'
    created_on : dd/mm/yyyy
    job_id__job_name : 'xxxxx'
    job_id__scheduled_time : 'xxxxx'
    job_id__args : 'xxxxx'
    job_id__interval : 'xxxxx'
    job_id__repeat : 'xxxxx'

有没有什么办法可以让我调整一些东西,用一个GET请求就可以得到这个东西。

django django-rest-framework django-serializer django-rest-viewsets
1个回答
0
投票

像这样尝试

class JobProcessDetailsSerializer(serializers.ModelSerializer):
  job_id = JobsMasterSerializer(read_only=True)

  class Meta:
    model = JobProcessDetails
    fields = [
      'job_id '
      'sequence'
      'step_name'
      'records'
      'created_by' 
      'created_on'
    ]
© www.soinside.com 2019 - 2024. All rights reserved.