Django Rest Framework对象不可迭代?
我有一个模型,它里面有一个外键,我把它序列化了。但是我遇到了一个错误,提示说 'Parent' object is not iterable
。
这是我的模型文件 models.py:
class Parent(models.Model):
# Parent data
class Child(models.Model):
parent = ForeignKey(Parent)
这是我的序列化文件 serializer.py:
class ChildSerializers(serializers.ModelSerializer):
parent = serializers.RelatedField(many=True)
class Meta:
model = ReportField
fields = (
'id',
'parent'
)
这是我的 API 文件 api.py:
class ChildList(APIView):
def get(self, request, format=None):
child = Child.objects.all()
serialized_child = ChildSerializers(child, many=True)
return Response(serialized_child.data)
我在想,我可能需要把父级的列表传给子级的列表,但我不太确定最好的方法是什么。
这是我在 api.py 中的尝试:
class ChildList(APIView):
def get(self, request, format=None):
child = Child.objects.all()
parent = Parent.objects.all()
serialized_child = ChildSerializers(child, many=True)
serialized_parent = ChildSerializers(parent, many=True)
return Response(serialized_child.data, serialized_parent.data)
4 个回答
0
如果你在使用一个叫做ModalSerializer的东西,并且在这个模型里有两个外键,那么你可以像下面这样使用“to_representation”这个函数。
def to_representation(self, instance):
rep = super().to_representation(instance)
rep['pcatalog_name'] = CatalogSerializer(instance.pcatalog_name).data
rep['pcategory_name'] = CategorySerializer(instance.pcategory_name).data
return rep
0
在编程中,有时候我们会遇到一些问题,尤其是在使用特定的工具或库时。比如,有人可能在使用某个库的时候,发现它的功能和自己想要的不太一样。这种情况可能会让人感到困惑,不知道该如何解决。
通常情况下,解决这类问题的方法是查看文档,看看这个库的使用说明,或者在网上搜索一下相关的讨论。很多时候,其他人也遇到过类似的问题,他们可能在论坛上分享了解决方案。
另外,尝试更新库的版本也是一个好主意,因为开发者会不断修复bug和改进功能,更新后可能就能解决你遇到的问题。
总之,遇到问题时,不要慌张,先查资料,看看有没有人遇到过类似的情况,或者尝试更新工具,通常都能找到解决办法。
You can do something like this using python collections as an intermediate
#serializers.py
class TimelineSerializer(serializers.Serializer):
childs= childSerializer(many=True)
parents = parentSerializer(many=True)
#apiviews.py
from collections import namedtuple
Timeline = namedtuple('Timeline', ('childs', 'parents'))
def list(self, request):
timeline = Timeline(
childs=Child.objects.all(),
parents=Parent.objects.all(),
)
serializer = TimelineSerializer(timeline)
return Response(serializer.data)
50
为什么要使用many=True?因为Parent只是一个单一的字段,不需要使用明确的序列化字段。直接去掉这些many=True就可以了。
- 这是mariodev在评论中回答的。