我在 Django 中设置了一个数据库模型来跟踪投资组合,并尝试开发一个 API 来返回投资组合以及其中的每个代币,以及与该代币关联的每笔交易。但是,使用 API 我只能看到返回的模型的名称字段。一些用于澄清的代码:
模型.py:
class Portfolio(models.Model):
name = models.CharField(max_length=250)
@property
def coins(self):
return Coin.objects.filter(portfolio=self)
def transactions(self):
return Transaction.objects.filter(portfolio=self)
def __str__(self):
return self.name
class Coin(models.Model):
portfolio = models.ForeignKey(Portfolio, on_delete=models.PROTECT)
name = models.CharField(max_length=100)
symbol = models.CharField(max_length=5)
price = models.DecimalField(max_digits=20, decimal_places=9)
info = models.TextField()
website = models.TextField()
rank = models.IntegerField()
def __str__(self):
return self.name + " - " + self.symbol
class Transaction(models.Model):
portfolio = models.ForeignKey(Portfolio, on_delete=models.CASCADE)
coin = models.ForeignKey(Coin, on_delete=models.PROTECT)
purchaseDate = models.DateTimeField()
soldDate = models.DateTimeField(default=None, null=True, blank=True)
amount = models.DecimalField(max_digits=20, decimal_places=3)
price = models.DecimalField(max_digits=20, decimal_places=9)
def __str__(self):
return self.coin.name + " - " + str(self.amount) + " At $" + str(self.price)
我的 json 序列化器:
class PortfolioSerializer(serializers.ModelSerializer):
class Meta:
model = Portfolio
fields = '__all__'
数据如何返回:
HTTP 200 OK
Allow: GET, POST, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept
[
{
"id": 3,
"name": "Binance"
}
]
我想要的是在数据集中,在 binance 下它应该显示一个硬币对象列表,其中包含每个硬币的交易列表。
最佳答案
你真的应该阅读Django-Rest-Framework docs :
class Portfolio(models.Model):
name = models.CharField(max_length=250)
@property
def coins(self):
return Coin.objects.filter(portfolio=self)
def transactions(self):
return Transaction.objects.filter(portfolio=self)
def __str__(self):
return self.name
class Coin(models.Model):
portfolio = models.ForeignKey(Portfolio, relared_name="coins" ,on_delete=models.PROTECT)
name = models.CharField(max_length=100)
symbol = models.CharField(max_length=5)
price = models.DecimalField(max_digits=20, decimal_places=9)
info = models.TextField()
website = models.TextField()
rank = models.IntegerField()
def __str__(self):
return self.name + " - " + self.symbol
在您的 PortfolioSerializer 中:
class PortfolioSerializer(serializers.ModelSerializer):
coins = CoinSerializer(many=True, read_only=True)
class Meta:
model = Portfolio
fields = '__all__'
这里应该在PortfolioSerializer
上面写一个CoinSerializer
,如:
class CoinSerializer(serializers.ModelSerializer):
class Meta:
model = Coin
fields = '__all__'
关于python - 从 Django 模型返回 JSON 格式的子属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48217170/