2017-12-26 2 views
0

Model_A의 데이터를 채우는 REST API를 만들었습니다. 하지만 이제 다른 모델에서 오는 API에 다른 데이터 필드를 추가해야합니다. parent 필드를 에서 내 API에 추가하고 parent 필드도 정확하게 Model_A 프로젝트와 연결해야합니다. 예를 들어 아래의 예는 내가 수행하려고 시도하지만 작동하지 않습니다 (참고 : model.py는 아닙니다.) 어쨌든에서 변경 될 수 :다른 모델의 다른 필드를 REST API에 추가

API : 필요한 코드의

class ReportAPI(APIView): 
    def get(self, request): 
     project_data = [] 
     all_projects = Model_A.objects.all() 
     for project in all_projects: 
      project_data.append(project) 
      project_parent = ModelParent.objects.filter(project=project.id) 
      for parent in project_parent: 
       project_data.append(parent) 
     project_serializer = SerializerA(all_projects, many=True) 
     return Response(project_serializer.data) 

나머지 :

모델 :

,
class Model_A(models.Model): 
    project_name = models.CharField(max_length=50, unique=True) 
    project_type = models.CharField(max_length=50, choices=p_type) 

class ModelParent(models.Model): 
    project = models.ForeignKey('Model_A', on_delete=models.CASCADE, related_name='+') 
    parent = models.ForeignKey('ModelParent', on_delete=models.SET(''), related_name='+', null=True, blank=True) 

시리얼 : 내 API의

class SerializerA(serializers.ModelSerializer): 
    class Meta: 
     model = Model_A 
     fields = ('id', 'project_name','project_type') 
     depth = 1 

전류 출력

[ 
    { 
     "id": 1, 
     "project_name": "Project A", 
     "project_type": "advertisement", 
    } 
] 

원하는 출력 :

[ 
    { 
     "id": 1, 
     "project_name": "Project A", 
     "project_type": "advertisement", 
     "parent_list": [ 
         { 
         id : "1", 
         parent : "Parent 1", 
         }, 
         { 
         id : "2", 
         parent : "Parent 2", 
         }, 
         ] 
    } 
] 

어떤 도움이 많이 감사합니다 감사합니다! 다음과 같이

답변

1

해당 모델은 다음과 같습니다 :

class ModelParent(models.Model): 
    project = models.ForeignKey('Model_A', on_delete=models.CASCADE, related_name='project') 
    parent = models.ForeignKey('ProjectContent', on_delete=models.SET(''), related_name='project_parent', null=True, blank=True) 

다음과 같이 시리얼은 다음과 같습니다 귀하의 의견

class ModelParentSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Model_A 
     fields = ('id', 'parent') 


class SerializerA(serializers.ModelSerializer): 
    parent_list = serializers.SerializerMethodField() 

    class Meta: 
     model = Model_A 
     fields = ('id', 'project_name','project_type', 'parent_list') 
     depth = 1 

    def get_parent_list(self, obj): 
     return ModelParentSerializer(obj.project, many=True).data #project is related name of project field 
+0

안녕 @Maulik 덕분에 덕분에, 내 사과는 내가 언급 했어야하는 I 어쨌든 모델로 단련 할 수는 없습니다. 그럼에도 불구하고 나는 여전히 당신의 코드 tqvm을 구현하려고 할 것이다. –

관련 문제