Django响应嵌套模型

Django响应嵌套模型,django,django-models,django-rest-framework,django-serializer,django-request,Django,Django Models,Django Rest Framework,Django Serializer,Django Request,我有以下型号: 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

我有以下型号:

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
但是,我希望看到投资组合(和投资组合元素)中的实际数据。但是,当我尝试在任意客户端上(通过(Client).number字段)发出GET请求时,我只能看到以下内容:

{
"number": "28101317",
"portfolios": [
    {
        "id": 14,
        "number": "5471-339425",
        "elements": [
            {
                "asset": 326
            },
            {
                "asset": 327
            }, ... (and so on)
如何调整我的代码,使我也可以得到实际的“资产”信息

/Niclas

您可以尝试以下方法:

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')
您可以尝试以下方法:

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

这管用!我还将所有的.FloatFields更改为.DecimalFields。谢谢:-)这很有效!我还将所有的.FloatFields更改为.DecimalFields。谢谢:-)