Как получить данные, включая запись в таблице отношений, с помощью запроса GET в DRF

Недавно я пробовал свои силы в 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',)

Я не знаю, правильный ли это способ создания наборов представлений и сериализатора, но у меня это сработало.

Я хочу написать запрос GET из пользовательского интерфейса, чтобы получить данные из 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.


person vvk24    schedule 23.05.2020    source источник


Ответы (1)


попробуй так

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'
    ]
person Florin    schedule 23.05.2020