首页 > 解决方案 > 从Django查询集中的另一个模型获取查询集

问题描述

class V(models.Model):
    title = models.CharField(max_length=100, blank=True, default='')
    doc = models.ForeignKey(D, on_delete=models.CASCADE, default='')
    upload_time = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ('upload_time',)

 class D(models.Model):
    name = models.CharField(max_length=100, blank=True, default='')

    def __str__(self):
        return self.name

在我这样写的 ModelViewSet 中:

class index(viewsets.ModelViewSet):
    serializer_class = VSerializer
    queryset = V.objects.all()

我已经通过 API 获得了这些数据

{
 "id": 1,
 "title": xxxxx
 "d_id": 8,
  ...
  ...
}

但是,我希望 d_id 更具体,如下所示:

{
 "id": 1,
 "title": xxxxx
 "d_id": {
     "id": 8,
     "name": xxx,
     ....
   }
...
...
}

所以 D Model 中的数据已经通过 d_id=8 获取并附加到原始查询集中。

我怎么能这样做?需要你的帮助...

标签: djangodjango-querysetdrf-queryset

解决方案


为您的模型 D 创建一个序列化程序。

class DSerializer(serializers.ModelSerializer):
    class Meta:
        model = D
        fields = ('field_1', 'field_2', 'field_3')

并在您的 VSerializer 中添加一个序列化器字段,如下所示:

class VSerializer(serializers.ModelSerializer):
    d = DSerializer() # This will add D's fields in V's API.
    class Meta:
        model = V
        fields = ('field_1', 'field_2', 'field_3')

阅读此文档以了解更多详细信息。 http://www.django-rest-framework.org/api-guide/relations/

希望这可以帮助。


推荐阅读