我在格式化DRF响应时遇到一个问题
我在这里共享我的模型详细信息
class Plan(AuditFields, Model):
id = models.AutoField(primary_key=True)
object_id = models.UUIDField(
unique=True, editable=False, verbose_name='Public identifier')
plan_name = models.CharField(max_length=255, blank=True)
team = models.ManyToManyField(
settings.AUTH_USER_MODEL, blank=True, related_name="%(app_label)s_%(class)s_team")
class PlanDetail(AuditFields, Model):
plan = models.ForeignKey(
Plan, on_delete=models.CASCADE, blank=True, null=True)
plan_stage = models.CharField(max_length=255, blank=True)
start_date = models.DateField(null=True, blank=True)
end_date = models.DateField(null=True, blank=True)
status_of_plan = models.CharField(max_length=255, blank=True)
使用上述模型,我需要创建这样的响应。但与此相关的是我遇到的一些问题
plan details : [
{
"plan_stage": "Sample1",
"status_of_plan": "Completed",
"start_date": "2019-07-01",
"end_date": "2019-07-01",
},
{
"plan_stage": "Sample2",
"status_of_plan": "Not Commenced",
"start_date": "2019-08-01",
"end_date": "2019-08-31",
},
{
"plan_stage": "Sample3",
"status_of_plan": "Not Commenced",
"start_date": "2019-09-01",
"end_date": "2019-09-30",
},
{
"plan_stage": "Sample4",
"status_of_plan": "Not Commenced",
"start_date": "2019-10-01",
"end_date": "2019-10-31",
},
{
"plan_stage": "Sample 5",
"status_of_plan": "Completed",
"start_date": "2019-11-01",
"end_date": "2019-11-30",
},
{
"plan_stage": "End Date (Final Report)",
"status_of_plan": "Completed",
"start_date": "2019-12-01",
"end_date": "2019-12-31",
}
]
plan :{
"id" : 1.
"object_id": 456789023456546,
"plan_name" : "Sample",
"team":['Sachin','Dravid']
}
我正在使用两个序列化器并对其进行尝试...但在这种情况下它不起作用
class PlanningSerializer(ModelSerializer):
'''THis is for Model Plan '''
team = TeamSerializer(many=True, read_only=True)
class Meta:
model = Plan
exclude = ['deleted_at']
class PlanningDetailsSerializer(ModelSerializer):
plan = PlanningSerializer(read_only=True)
class Meta:
model = PlanDetail
exclude = ['deleted_at']
但是我面临一个问题
我正在收到这样的回复
[
{
"plan_stage": "Sample1",
"status_of_plan": "Completed",
"start_date": "2019-07-01",
"end_date": "2019-07-01",
"plan": {
"id" : 1.
"object_id": 456789023456546,
"plan_name" : "Sample",
"team":['Sachin','Dravid']
}
},
{
"plan_stage": "Sample2",
"status_of_plan": "Not Commenced",
"start_date": "2019-08-01",
"end_date": "2019-08-31",
"plan": {
"id" : 1.
"object_id": 456789023456546,
"plan_name" : "Sample",
"team":['Sachin','Dravid']
}
},
{
"plan_stage": "Sample3",
"status_of_plan": "Not Commenced",
"start_date": "2019-09-01",
"end_date": "2019-09-30",
"plan": {
"id" : 1.
"object_id": 456789023456546,
"plan_name" : "Sample",
"team":['Sachin','Dravid']
}
},
{
"plan_stage": "Sample4",
"status_of_plan": "Not Commenced",
"start_date": "2019-10-01",
"end_date": "2019-10-31",
"plan": {
"id" : 1.
"object_id": 456789023456546,
"plan_name" : "Sample",
"team":['Sachin','Dravid']
}
},
{
"plan_stage": "Sample 5",
"status_of_plan": "Completed",
"start_date": "2019-11-01",
"end_date": "2019-11-30",
"plan": {
"id" : 1.
"object_id": 456789023456546,
"plan_name" : "Sample",
"team":['Sachin','Dravid']
}
},
{
"plan_stage": "Sample6",
"status_of_plan": "Completed",
"start_date": "2019-12-01",
"end_date": "2019-12-31",
"plan": {
"id" : 1.
"object_id": 456789023456546,
"plan_name" : "Sample",
"team":['Sachin','Dravid']
}
}
]
如何将它们中的两个结合起来并使用新字段创建新的序列化器
class PlanningDetailsSerializer(ModelSerializer):
class Meta:
model = PlanDetail
exclude = ['deleted_at', 'plan']
如果您希望在相同的响应中看到结果,则建议尝试此操作:
class PlanningAPIView(APIView): def get(self, request, *args, **kwargs): plan_details = PlanDetail.objects.all() # or some query plan = Plan.objects.all() # or some query plan_detail_serializer = PlanDetail(data=plan_details, many=True) plan_serializer = Plan(data=plan, many=True) return Response({"plan_details": plan_detail_serializer.data, "plan": plan_serializer.data}, status=status.HTTP_200_OK)