Python django rest农场作业嵌套关系
使用django rest farmework实现API,这里的嵌套关系中存在问题。与外键关联的内容无法显示,具体代码如下: models.pyPython django rest农场作业嵌套关系,python,django,django-rest-framework,Python,Django,Django Rest Framework,使用django rest farmework实现API,这里的嵌套关系中存在问题。与外键关联的内容无法显示,具体代码如下: models.py class Category(models.Model): name = models.CharField(max_length=30) amount = models.IntegerField() class Source(models.Model): name = models.CharField(max_length=5
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()
# ForeignKey
category = models.ForeignKey(Category)
views.py
class CategoryListView(APIView):
def get(self, request):
category = Category.objects.all()
serializers = CategorySerializers(category, many=True)
return Response(serializers.data)
序列化程序.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")
程序运行结果:
[
{
"id": 1,
"name": "默认分类",
"amount": 0
},
{
"id": 2,
"name": "科技频道",
"amount": 0
}
]
为什么不能在结果中显示“源”
我希望结果是这样
[
{
"id": 1,
"name": "默认分类",
"amount": "0",
"source": [
{
"id": 34,
"name": "博客园",
"amount": "231"
},
{
"id": 35,
"name": "CSDN",
"amount": "643"
}
]
},
{
"id": 2,
"name": "科技频道",
"amount": "0",
"source": []
}
]
多亏克劳斯·D的评论,问题才得以解决。 我们可以在models.py中添加
related\u name='source'
,如下所示:
class Source(models.Model):
name = models.CharField(max_length=50)
rss_link = models.URLField()
amount = models.IntegerField()
# ForeignKey
category = models.ForeignKey(Category,related_name = 'source')
#serializers.py
class CategorySerializers(serializers.ModelSerializer):
source_set = SourceSerializers(many=True, read_only=True)
class Meta:
model = Category
fields = ("id","name","amount","source_set")
如果不在foreignkey中添加相关的_名称,则默认为“source_set”
所以,我们也可以这样解决问题:
class Source(models.Model):
name = models.CharField(max_length=50)
rss_link = models.URLField()
amount = models.IntegerField()
# ForeignKey
category = models.ForeignKey(Category,related_name = 'source')
#serializers.py
class CategorySerializers(serializers.ModelSerializer):
source_set = SourceSerializers(many=True, read_only=True)
class Meta:
model = Category
fields = ("id","name","amount","source_set")
多亏克劳斯·D的评论,问题才得以解决。 我们可以在models.py中添加
related\u name='source'
,如下所示:
class Source(models.Model):
name = models.CharField(max_length=50)
rss_link = models.URLField()
amount = models.IntegerField()
# ForeignKey
category = models.ForeignKey(Category,related_name = 'source')
#serializers.py
class CategorySerializers(serializers.ModelSerializer):
source_set = SourceSerializers(many=True, read_only=True)
class Meta:
model = Category
fields = ("id","name","amount","source_set")
如果不在foreignkey中添加相关的_名称,则默认为“source_set”
所以,我们也可以这样解决问题:
class Source(models.Model):
name = models.CharField(max_length=50)
rss_link = models.URLField()
amount = models.IntegerField()
# ForeignKey
category = models.ForeignKey(Category,related_name = 'source')
#serializers.py
class CategorySerializers(serializers.ModelSerializer):
source_set = SourceSerializers(many=True, read_only=True)
class Meta:
model = Category
fields = ("id","name","amount","source_set")
您没有为ForeignKey定义相关名称,因此反向关系默认为
source\u set
。非常感谢,问题已经解决。您没有为ForeignKey定义相关名称,因此反向关系默认为source\u set
。非常感谢,问题已经解决。