Arrays 序列化多个对象-json表示-使用数组而不是列表表示
我正在使用Django Rest框架构建服务器部分。我有以下型号:Arrays 序列化多个对象-json表示-使用数组而不是列表表示,arrays,json,python-3.x,django-rest-framework,django-serializer,Arrays,Json,Python 3.x,Django Rest Framework,Django Serializer,我正在使用Django Rest框架构建服务器部分。我有以下型号: class B: name_b = models.CharField(max_length=200) class D: name_d = models.CharField(max_length=200) class C: B_fk = models.ForeignKey(B, related_name='B_id') D_fk = models.ForeignKey(D, related_name
class B:
name_b = models.CharField(max_length=200)
class D:
name_d = models.CharField(max_length=200)
class C:
B_fk = models.ForeignKey(B, related_name='B_id')
D_fk = models.ForeignKey(D, related_name='D_id')
下面是使用嵌套关系()的序列化程序:
我的看法是:
class MyView(generics.ListCreateAPIView):
permission_classes = (permissions.IsAuthenticated,)
queryset = B.objects.all()
serializer_class = B_Serializer
最后我有JSON,如下所示:
[{"name_b": "NAME B", "B_id": [{"D_id": 130},{"D_id": 135},{"D_id": 145},{"D_id": 154}]}]
但是我想要
[{"name_b": "NAME B", "B_id":[130, 135, 145, 154]}]
可能吗?你能帮我吗
提前谢谢你 那么您就不需要嵌套序列化程序了。默认关系正在使用
请注意,您的模型的相关\u名称似乎有误,因为您需要.B\u id才能访问C实例。当您需要更简单的
PrimaryKeyRelatedField
时,为什么要使用嵌套表示?@Ivan,谢谢您的回答。但在本例中,我将获得C实体的ID。这意味着数组中的C.id。但是我想要C.D_fk(或C.D_id)。感谢您的回答,但这将导致错误:“在序列化程序“B_serializer”中的字段“ManyRelatedField”上指定source='B_id'
是多余的,因为它与字段名相同。删除source
关键字参数。'抱歉,我没有完成我的评论:实际上你的建议将导致[{“name_b”:“name b”,“b_id:[1,2,3,4]}]
-数组中是C.id,但我需要C.D_id,这是表C中的字段。所以数组应该是[130,135,145,154]
在B ID的标签下返回D ID可能不是一个好主意-我在这方面是个新手。。。那么,将一个父项(B项)序列化为多个子项(C项,每个子项包含FK到D)的好方法是什么?我要B1[C1,C2,C3,C4,C5]
[{"name_b": "NAME B", "B_id":[130, 135, 145, 154]}]
class B_Serializer(serializers.ModelSerializer):
B_id = PrimaryKeyRelatedField(many=True, source=B_id)
class Meta:
model = B
fields = ('name_b','B_id',)