【问题标题】:Adding another field into REST API that from another model将另一个字段添加到来自另一个模型的 REST API
【发布时间】:2017-12-26 18:20:05
【问题描述】:

我创建了一个 REST API,用于填充来自 Model_A 的数据。但现在我需要将另一个数据字段添加到来自另一个模型的 API 中。如何将ModelParent 中的parent 字段添加到我的API 中,并且parent 字段也必须与Model_A 项目正确关联,例如下面是我尝试做但不工作的示例( 注意:无论如何都不允许更改model.py):

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)

序列化器:

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

我的 API 的当前输出

[
    {
        "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",
                        },
                       ]
    }
]

任何帮助都非常感谢!

【问题讨论】:

    标签: python api django-rest-framework


    【解决方案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
    

    【讨论】:

    • 嗨@Maulik,感谢您的意见,我很抱歉,我应该提到我根本无法对模型进行调整。尽管如此,我仍然会尝试实现您的代码 tqvm
    猜你喜欢
    • 2021-03-27
    • 1970-01-01
    • 2017-01-31
    • 1970-01-01
    • 2022-10-25
    • 2021-10-10
    • 1970-01-01
    • 2011-08-30
    • 2021-01-31
    相关资源
    最近更新 更多