- 前言
- Models
- Serializers
- Views
- 数据库
- 结果
由于没有使用Django的templates,而仅仅是将Django作为后端,因此使用rest_framework来实现resful风格的API,在开发过程中将place作为image的外键,希望达到的目标是在获取所有place信息的同时,获取它相关的image,通过image中的Foreignkey即place_id反向获取多个image对象。通过不断探索,终于是实现了这个效果。现在看来这个实现过程非常简单,只是苦于之前缺少相关知识,久久无法实现,特此记录,希望能帮到有需要的人。
Models#地点类
class Place(models.Model):
id = models.CharField(max_length=32, primary_key=True)
name = models.CharField(max_length=255, blank=True, null=True)
#图片类
class PlaceImage(models.Model):
id = models.CharField(max_length=32, primary_key=True)
name = models.CharField(max_length=255, blank=True, null=True)
place = models.ForeignKey(Place, on_delete=models.CASCADE, related_name='place_image')
Serializers
class PlaceImageSerializer(serializers.ModelSerializer):
class Meta:
model = PlaceImage
fields = ('id', 'name')
class PlaceSerializer(serializers.ModelSerializer):
#有多张图片, many=True
place_image = PlaceImageSerializer(many=True)
class Meta:
model = Place
fields = "__all__"
Views
class PlaceViewSet(ModelViewSet):
serializer_class = PlaceSerializer
def list(self, request, **kwargs):
queryset = Place.objects.prefetch_related('place_image')
serializer = PlaceSerializer(queryset, many=True)
response = {'code': 0, 'data': serializer.data, 'msg': '', 'total': len(serializer.data)}
return Response(response)
数据库
- place
- place_image
{
"code": 0,
"data": [
{
"id": "1",
"place_image": [
{
"id": "1",
"name": "pic1"
},
{
"id": "2",
"name": "pic2"
}
],
"name": "School"
},
{
"id": "2",
"place_image": [
{
"id": "3",
"name": "pic3"
}
],
"name": "Market"
}
],
"msg": "",
"total": 2
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)