django - 序列化来自多个模型 django 的数据
问题描述
是否可以在 django 中序列化来自多个模型的数据?
例如,我下面的代码目前将提供来自我的“构建”模型的数据的 JSON。
序列化程序.py
class buildStatsAPI_serializer(serializers.ModelSerializer):
class Meta:
fields = ('id','author_id','buildDescrip','buildStart','buildNotes')
model = Build
视图.py
class buildStatsAPI(generics.ListCreateAPIView):
permission_classes = (permissions.IsAuthenticated,)
serializer_class = buildStatsAPI_serializer
def get_queryset(self):
machinesOwned = CustomUser.objects.filter(customerTag=self.request.user.customerTag).filter(isDevice=True)
machineList = []
for machine in machinesOwned:
machineList = machineList + [machine.id]
query = Build.objects.filter(deleted=0, author_id__in=machineList,).values().order_by('pk')
return query
如何在同一个序列化程序中包含来自其他模型的数据?具体来说,我目前正在序列化“author_id”,它是我的 CustomUser 模型的外键。我想从此模型中获取“authorName”并将其包含在同一个 JSON 对象中。
解决方案
您可以使用嵌套序列化。请在此处详细查看https://www.django-rest-framework.org/api-guide/relations/#nested-relationships
楷模
class Album(models.Model):
album_name = models.CharField(max_length=100)
artist = models.CharField(max_length=100)
class Track(models.Model):
album = models.ForeignKey(Album, related_name='tracks', on_delete=models.CASCADE)
order = models.IntegerField()
title = models.CharField(max_length=100)
duration = models.IntegerField()
class Meta:
unique_together = ('album', 'order')
ordering = ['order']
并在序列化程序中
class TrackSerializer(serializers.ModelSerializer):
class Meta:
model = Track
fields = ('order', 'title', 'duration')
class AlbumSerializer(serializers.ModelSerializer):
tracks = TrackSerializer(many=True, read_only=True)
class Meta:
model = Album
fields = ('album_name', 'artist', 'tracks')
现在您可以获取数据
{
'album_name': 'The Grey Album',
'artist': 'Danger Mouse',
'tracks': [
{'order': 1, 'title': 'Public Service Announcement', 'duration': 245},
{'order': 2, 'title': 'What More Can I Say', 'duration': 264},
{'order': 3, 'title': 'Encore', 'duration': 159},
...
],
}
如果需要,您还可以将它们修改为可写。有关可写嵌套序列化程序,请参阅https://www.django-rest-framework.org/api-guide/relations/#writable-nested-serializers
推荐阅读
- amazon-web-services - 如何使用 Aws Cli 的 EC2 实例角色
- arrays - 无法在循环中将数组的值设置为 0 - JS
- java - 为什么 arr[6] 在此代码中返回空值?
- javascript - 在 a-frame AR.js 中禁用屏幕上的拖动
- multidimensional-array - 读取二维表时出错
- javascript - 无法使用 JavaScript 中的 for 循环将堆栈的所有元素推入另一个堆栈
- typescript - React Hotkeys 键盘映射在打字稿中给出类型错误
- r - geom_line() 参数方向不起作用
- android - Android WebView 抱怨证书不受信任,但它在所有其他浏览器中都受信任
- sql-server - 批处理文件不记录 SQL 错误