2017-11-13 4 views
0

私はmodels.pyに以下のテーブルを持っています。私はなぜ複数のテーブルが動作しないネストされたシリアライザ

{ 
    "availability": "Current", 
    "series": "3000", 
    "model": "2000", 
    "drive_type": [ 
     { 
      "drive_name": "drive1", 
      "requirements": { 
       "drive_type": 2, 
       "performance_unit": "by_iops", 
      } 
     } 
    ] 
} 

class SnippetDetail(generics.RetrieveUpdateDestroyAPIView): 
    def get_queryset(self): 
     return ProductLine.objects.filter(id=self.kwargs.get("pk")) 
    serializer_class = ProductLineSerializer 

私は以下のように出力を取得しています。私の見解で

class WorkloadTypeSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = WorkloadType 
     fields = "__all__" 


class RequirementsSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Requirements 
     fields = "__all__" 


class DriveTypeSerializer(serializers.ModelSerializer): 
    requirements = RequirementsSerializer(many = False, read_only = True) 
    workload_type = WorkloadTypeSerializer(many=False,read_only=True) 

    class Meta: 
     model = DriveType 
     fields = (
     "drive_name", "available_drive_type", "capacity", "raid_type", "raid_size", "workload", "workload_percentage", 
     "raid_groups", "compression", "compression_value","requirements","workload_type") 


class ProductLineSerializer(serializers.ModelSerializer): 
    drive_type = DriveTypeSerializer(many=True, read_only=True) 

    class Meta: 
     model = ProductLine 
     fields = ('availability','series','model','drive_type') 

私はこれを持っている:私はシリアライザの下にいる

class ProductLine(models.Model): 
    availability = models.CharField(max_length=20, blank=True, null=True) 
    series = models.CharField(max_length=20, blank=True, null=True) 
    model = models.CharField(max_length=20, blank=True, null=True) 

    class Meta: 
     db_table = "product_line" 

class DriveType(models.Model): 
    drive_name = models.CharField(max_length=20, blank=True, null=True)  
    product_line = models.ForeignKey(ProductLine, related_name="drive_type") 

class Requirements(models.Model): 
    performance_unit = models.CharField(max_length=100, blank=True, null=True) 
    drive_type = models.OneToOneField(DriveType,on_delete=models.CASCADE,primary_key=True) 

    class Meta: 
     db_table = "requirements" 

class WorkloadType(models.Model): 
    workload_type_options = models.CharField(max_length=50, blank=True, null=True)  
    drive_type = models.OneToOneField(DriveType,on_delete=models.CASCADE,primary_key=True) 

    class Meta: 
     db_table = "workload_type" 

WorkLoadTypeテーブルを表示できませんd jsonのataでは、要件データが表示されます。私はjsonでフィールドを見ていない。ネストされたシリアライザは単一のリレーションテーブルのみをサポートします

答えて

0

自分の質問に答える。リバースリレーションシップのモデルでrelated_nameを使用する必要があります。

class Requirements(models.Model): 
    performance_unit = models.CharField(max_length=100, blank=True, null=True) 
    drive_type = models.OneToOneField(DriveType,on_delete=models.CASCADE,primary_key=True,related_name=requirements) 

    class Meta: 
     db_table = "requirements" 

class WorkloadType(models.Model): 
    workload_type_options = models.CharField(max_length=50, blank=True, null=True)  
    drive_type = models.OneToOneField(DriveType,on_delete=models.CASCADE,primary_key=True,related_name=workload_type) 
関連する問題