0

我有以下型号:Django的响应嵌套模型

class Asset(models.Model): 
    isin = models.CharField(max_length=100) 
    asset_type = models.CharField(max_length=50) 
    last_price = models.FloatField 
    security_weight = models.FloatField 
    update_date = models.DateTimeField 

    def __str__(self): 
     return self.isin 

    class Meta: 
     ordering = ('isin',) 

class PortfolioElement(models.Model): 
    nominal = models.FloatField 
    weight = models.FloatField 
    asset = models.OneToOneField(
     Asset, 
     on_delete=models.CASCADE, 
     primary_key=True, 
    ) 

    def __str__(self): 
     return self.asset.isin 

    class Meta: 
     ordering = ('asset',) 

class Portfolio(models.Model): 
    number = models.CharField(max_length=100) 
    update_date = models.DateTimeField 
    elements = models.ManyToManyField(PortfolioElement) 

    def __str__(self): 
     return self.number 

    class Meta: 
     ordering = ('number',) 

class Client(models.Model): 
    number = models.CharField(max_length=100) 
    update_date = models.DateTimeField 
    portfolios = models.ManyToManyField(Portfolio) 

    def __str__(self): 
     return self.number 

    class Meta: 
     ordering = ('number',) 

及以下串行:

class ClientSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Client 
     fields = ('number', 'portfolios') 
     depth = 1 

不过,我想看看在投资组合(和组合元素)的实际数据。但是,当我试图让在任意客户端的GET请求(由端(Client)。数场),我只能看到以下内容:

{ 
"number": "28101317", 
"portfolios": [ 
    { 
     "id": 14, 
     "number": "5471-339425", 
     "elements": [ 
      { 
       "asset": 326 
      }, 
      { 
       "asset": 327 
      }, ... (and so on) 

如何能调整我的代码,这样我还可以得到实际的“资产”信息?

/尼克拉斯

回答

1

你可以试试这个:

class AssetSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Asset 
     fields = '__all__' 

class PortfolioElementSerializer(serializers.ModelSerializer): 
    asset = AssetSerializer() 

    class Meta: 
     model = PortfolioElement 
     fields = ('nominal', 'weight', 'asset') 

class PortfolioSerializer(serializers.ModelSerializer): 
    elements = PortfolioElementSerializer(many=True) 
    class Meta: 
     model = Portfolio 
     fields = ('number', 'update_date', 'elements') 

class ClientSerializer(serializers.ModelSerializer): 
    portfolios = PortfolioSerializer(many=True) 
    class Meta: 
     model = Client 
     fields = ('number', 'portfolios') 
+0

这是行不通的。 – Niclas

+0

@Niclas我编辑了我的答案。这应该工作。 – mohammadjh

+0

这个作品!我也将所有.FloatFields更改为.DecimalFields。谢谢 :-) – Niclas