python - Django rest-framework 关联表内容没有显示
本文介绍了python - Django rest-framework 关联表内容没有显示的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
数据库表的关系:
category 与 source 是一对多的关系
select * from reader_category,reader_source where reader_category.id = reader_source.category_id
查询结果:
下面是代码:
models.py
class Category(models.Model):
name = models.CharField(max_length=30)
amount = models.IntegerField()
class Source(models.Model):
name = models.CharField(max_length=50)
rss_link = models.URLField()
amount = models.IntegerField()
# 外键
category = models.ForeignKey(Category)
serializers.py
class SourceSerializers(serializers.ModelSerializer):
class Meta:
model = Source
fields = ("id","name","amount")
class CategorySerializers(serializers.ModelSerializer):
source = SourceSerializers(many=True,read_only=True)
class Meta:
model = Category
fields = ("id","name","amount","source")
views.py
class CategoryListView(APIView):
def get(self, request):
category = Category.objects.all()
serializers = CategorySerializers(category, many=True)
return Response(serializers.data)
运行结果:
问题:
在序列化后,代码中已经把source加进来了,为什么结果没有显示source?
我希望的结果是这样的:
[
{
"id": 1,
"name": "默认分类",
"amount": "0",
"source": [
{
"id": 34,
"name": "博客园",
"amount": "231"
},
{
"id": 35,
"name": "CSDN",
"amount": "643"
}
]
},
{
"id": 2,
"name": "科技频道",
"amount": "0",
"source": []
}
]
其他信息:
django版本:1.8.2
解决方案
Category Model中并没有Source字段。所以这样写不会显示。
可以尝试在CategorySerializer中增加一个自定义字段:
class CategorySerializers(serializers.ModelSerializer):
source = serializers.SerializerMethodField()
def get_source(self, obj):
sources = Source.objects.filter(category=obj)
return SourceSerializers(sources, many=True, read_only=True).data
class Meta:
model = Category
fields = ("id","name","amount","source")
这篇关于python - Django rest-framework 关联表内容没有显示的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文