mol*_*son 4 django foreign-keys serializer django-rest-framework
我正在使用Django REST框架,并尝试映射一个简单的外键关系以提供相关数据以供进一步使用,类似于以下请求:
将反向关系与Django-rest-framework的序列化器一起使用
我收到以下异常,而不是结果:
尝试获取album_name序列化程序中字段的值时出现AttributeError AlbumSerializer。序列化程序字段的名称可能不正确,并且与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)
Run Code Online (Sandbox Code Playgroud)
序列化器:
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')
Run Code Online (Sandbox Code Playgroud)
视图:
class TrackView(viewsets.ModelViewSet):
queryset = Track.objects.all().select_related('album')
serializer_class = serializers.TrackSerializer
Run Code Online (Sandbox Code Playgroud)
到目前为止我尝试过的是:
由于我没有足够的想法和材料来浏览,所以我问一个问题:关于示例,如何列出每个Track的Album的全部或单个属性(!= PrimaryKey)。
album_id在Track模型中只是专辑的主键,因此您需要int输入错误描述。您需要album通过使用albumfield而不是指定整个对象album_id:
class TrackSerializer(serializers.ModelSerializer):
album = AlbumSerializer(many=False, read_only=True)
class Meta:
model = Track
fields = ('order', 'title', 'duration', 'album')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2030 次 |
| 最近记录: |