更新时间:2021-12-16 09:58:41
解决方案-1:使用 Model2Serializer
在 Model1
a href =http://www.django-rest-framework.org/api-guide/fields/#serializermethodfield =nofollow> SerializerMethodField()
Solution-1: Using Model2Serializer
in a Model1
's SerializerMethodField()
在此方法中,我们定义了一个 model2_data
SerializerMethodField ()
字段在 Model1Serializer
中。在那里,我们将首先使用当前的 Model1
对象获取所有 Model2
对象。然后我们用 many = True
参数初始化 Model2Serializer
,并将所有获得的 Model2
实例。要返回 Model2
对象的序列化表示,我们访问 .data
属性。
In this method, we define a model2_data
SerializerMethodField()
field in the Model1Serializer
. There, we will first fetch all the Model2
objects using the current Model1
object. Then we initialize the Model2Serializer
with many=True
argument and pass all the obtained Model2
instances. To return the serialized representation of Model2
objects, we access the .data
property.
class Model1Serializer(serializers.ModelSerializer):
model2_data = serializers.SerializerMethodField() # define separate field
class Meta:
model = Model1
fields = [.., 'model2_data']
def get_model2_data(self, obj):
# here write the logic to get the 'Model2' objects using 'obj'
# initialize the 'Model2Serializer'
model2_serializer = Model2Serializer(model2_objs, many=True)
# return the serialized representation of 'Model2' objs
return model2_serializer.data
解决方案-2 :覆盖检索
方法
Solution-2: Overriding the retrieve
method
另一个选项是覆盖检索
方法,并将 model2_data
添加到您的回应以及原始回复。
Another option is to override the retrieve
method and add the model2_data
to your response along with original response.
class MyView(generics.RetrieveAPIView):
serializer_class = Model1Serializer
def retrieve(self, request, *args, **kwargs):
instance = self.get_object()
serializer = self.get_serializer(instance)
# get the original serialized data
serialized_data = serializer.data
# get the 'Model2' objects using 'serializer.instance'
model2_serializer = Model2Serializer(model2_objs, many=True)
model2_data = model2_serializer.data
# add the serialized representation of `Model2` objs
serialized_data['model2_data'] = model2_data
return Response(serialized_data)
PS :我知道这些解决方案不是清洁。如果这两个模型有关系,我们可以以更清洁的方式解决问题。
PS: I know these solutions are not clean. Had the two models been related, we could have approached the problem in a more cleaner way.