【发布时间】:2018-08-05 03:50:34
【问题描述】:
我正在使用 django REST-framework 并尝试映射一个简单的外键关系以提供相关数据以供进一步使用,类似于以下请求:
Using reverse relationships with django-rest-framework's serializer
我收到以下异常,而不是结果:
在序列化程序 AlbumSerializer 上尝试获取字段 album_name 的值时出现 AttributeError。
序列化程序字段可能命名不正确,并且与 int 实例上的任何属性或键都不匹配。
原始异常文本是:“int”对象没有属性“album_name”。
型号:
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)
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']
def __unicode__(self):
return '%d: %s' % (self.order, self.title)
序列化器:
class AlbumSerializer(serializers.ModelSerializer):
class Meta:
model = Album
fields = ('id', 'album_name', 'artist' )
class TrackSerializer(serializers.ModelSerializer):
album_id = AlbumSerializer(many=False, read_only=True)
class Meta:
model = Track
fields = ('order', 'title', 'duration', 'album_id')
查看:
class TrackView(viewsets.ModelViewSet):
queryset = Track.objects.all().select_related('album')
serializer_class = serializers.TrackSerializer
到目前为止我所尝试的:
- 使用反向关系将具有相关曲目的专辑序列化为嵌套序列化程序 => 有效
- 只为没有嵌套专辑的 TrackSerializer 做这项工作 => works
- 只为 AlbumSerializer 做这项工作 => 作品
- 使用 TrackSerializer,如代码部分所示,但将 AlbumSerializer 减少每个 除了主键 'id' => works 之外的字段(但我需要 整个专辑数据集)
- 通过设置 many=True 将嵌套的序列化程序更改为多关系。 => 转储,因为框架试图迭代 AlbumSerializer 的所有字段。
由于我没有足够的想法和材料来浏览,所以我在问这个问题: 关于我的示例,如何为每个曲目列出专辑的所有或单个属性(!= PrimaryKey)。
【问题讨论】:
标签: django django-rest-framework foreign-keys serialization