Django Rest框架具有多对多框架和中间模型

时间:2016-11-03 03:50:10

标签: python django django-rest-framework

我不确定如何为预期的JSON文件序列化以下模型的数据。

以下是我的模特:

class CheckModel(models.Model):
    check_name     =   models.CharField(max_length=1024,unique=True)
    RulesToWaivers =   models.ManyToManyField('RulesToWaivers',blank=True,default='default')

class RulesToWaivers(models.Model):
    rule    =   models.ManyToManyField('Rule',blank=True )
    waiver  =   models.ManyToManyField('Waiver',blank=True)
    deliverables     =  models.ManyToManyField('Deliverables',blank=True)


class Waiver(CommonInfo):
    desc =   models.TextField(blank=True)

class Rule(models.Model):
    rule_description =  models.CharField(max_length=512,blank=True) 

class Deliverables(CommonInfo):
    name        =   models.CharField(max_length=1024,blank=True)

以下是我的序列化程序

class CheckModelSerializer(serializers.ModelSerializer):
      rulewaiver=RuleWaiverSerializer(read_only=True,many=True)

     class Meta:
         model= CheckModel
         fields = ('check_name','rulewaiver')

class RuleSerializer(serializers.ModelSerializer):
      class Meta:
         model=Rule
         fields=('id','rule_description')
class WaiverSerializer(serializers.ModelSerializer):
      class Meta:
         model=Waiver
         fields=('id','desc')
class DeliverbalesSerializer(serializers.ModelSerializer):
      class Meta:
         model=Deliverables
         fields=('id','name')

我想以下列格式序列化数据

{
"p0_checks" : [
    {
        "check_id": "400",
        "rules" : [
            {
                "rule_id" : "21_22",
                "description": "checks blah blah",
                "deliverables" : ["del1"],
                 "waivers": [
                    {
                        "description" : "I will waive everything"
                    },
                    {
                         "description" : "I will waive all warnings"
                    }                   
                ]
            },
            {
                "rule_id" : "15217",
            "description": "checks blah blah"
                "req_ids" : ["lef"],
                "waivers": [
                    {
                        "description" : "I will waive everything"
                    },
                    {

                        "description" : "I will waive all warnings"
                    }
                ]
            }
        ]
    },

我不确定如何从序列化器中获取这个json,有什么建议吗?

1 个答案:

答案 0 :(得分:0)

尝试

class CheckModelSerializer(serializers.ModelSerializer):
      rulewaiver=RuleWaiverSerializer(read_only=True,many=True)

     class Meta:
         model= CheckModel
         fields = ('check_name','rulewaiver')
         depth=2

您的观点

class CheckModelSet(viewsets.ModelViewSet):
    queryset = CheckModel.objects.all()
    serializer_class = CheckModelSerializer
    def get_queryset(self):
        return self.queryset

并通过添加参数?include=rulewaiver

来访问该网址