django - 从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 获取并附加到原始查询集中。
我怎么能这样做?需要你的帮助...
解决方案
为您的模型 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/
希望这可以帮助。
推荐阅读
- json - 如何不断地从 url 获取数据并将其存储在 db 中?
- c# - 如何在 Linux 上为 .NET Core 编译 Windows.Forms 应用程序?
- css - 使下拉的宽度更大
- flutter - 添加此包失败(flutter_native_splash ^1.2.0 和flutter_launcher_icons 0.7.3,版本解析失败。)
- node.js - 将 process.stdin 数字文件描述符转换为 FileHandle?
- asp.net-mvc - 如何知道客户端应用程序发布到 API 的数据是否是原始的/未更改的
- reactjs - 无线电输入卡 - React + Antd
- node.js - Webpack / Vue.js:使用 ESM 依赖项在编译时生成模块代码
- python - 将索引 n 处的 pandas 数据帧列与索引 nk 处同一数据帧中的另一列相乘的有效方法
- python - 我不能在 python 上使用 plotly