2017-11-13 6 views
0

Ich habe die folgenden Tabellen in models.py.Verschachtelte Serializer mit mehreren Tabellen funktioniert nicht

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" 

I unter Serializer haben:

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') 

In meinen Ansichten Ich habe dies:

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

I-Ausgang bin immer wie folgt:

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

Warum ich bin WorkLoadType-Tabellen können nicht angezeigt werden d Ata in Json, wo ich in der Lage bin, Anforderungen Daten zu sehen. Ich sehe das Feld in JSON nicht einmal. Verschachtelte Serialisierer unterstützen nur eine einzige Beziehung Tabellen

Antwort

0

Beantworten Sie meine eigene Frage. Verwenden Sie related_name in den Modellen für umgekehrte Beziehung.

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) 
Verwandte Themen