DRF通过向其中添加外键查询集来创建查询集

时间:2017-09-07 05:12:45

标签: json django-rest-framework django-queryset

我想将外国数据(子模型)导入父模型查询集

我可以将外国数据添加到父数据,但它是 JSON 。我想将 JSON 转换为queryset,因为 get_queryset()会返回 model / queryset

我google了很多但却找不到任何帮助。

class Parent(models.Model):
    parent_name = models.TextField()
    child = models.ForeignKey(Child, related_name="+", on_delete=models.CASCADE, null=True)


class Child(models.Model):
    child_name = models.TextField()


class ParentViewSet(viewsets.ModelViewSet):
    queryset = Parent.objects.all()
    serializer_class = ParentInfoSerializer
    filter_backends = (filters.DjangoFilterBackend,)
    filter_fields = ['parent_name']

   def get_queryset(self):
        response = []
        parent_name = self.request.GET.getlist("parent_name")[0]# 
        parent_queryset = 
              Parent.objects.filter(parent_name=parent_name)
        for par_queryset in parent_queryset:
            parent_result = self.serializer_class(phy_queryset).data
            child_id = physician_info_result["child"]
            child_instance = Child.objects.get(pk=child_id)
            child_result = ChildSerializer(child_instance).data
            parent_result["child"] = child_result
            response.append(parent_result)
       return response

网址

http://localhost:9000/api/parent?parent_name=xyz

响应输出是:

[{     “parent_name”:“xyz”,     “孩子”:[{         “id”:1         “child_name”:“abc”     }] }]

但是在输出之上它是 JSON 想要的。我希望输出到 queryset / model

注意 :Queryset输出应包含外部查询集。

1 个答案:

答案 0 :(得分:2)

您可以只替换子到序列化程序的默认字段,它可以按您的意愿工作。

class ParentSerializer(models.Model):
    child = ChildSerializer()

     class Meta:
         models = Parent
         fields = ('parent_name', 'child')

您也不需要覆盖get_queryset方法。