我目前有款,其中一個Node可以有很多Benchmark的,但它顯示給最終用戶時,我只想串行回最新benchmark的node,而不是所有的人,它目前確實。我怎樣才能做到這一點?
模型.py
class Node(models.Model):
node_id = models.CharField(max_length=42, unique=True)
wallet = models.CharField(max_length=42, null=True, blank=True)
earnings_total = models.FloatField(null=True, blank=True)
data = models.JSONField(null=True)
online = models.BooleanField(default=False)
version = models.CharField(max_length=5)
updated_at = models.DateTimeField(null=True, blank=True)
created_at = models.DateTimeField(auto_now_add=True)
class Benchmark(models.Model):
benchmark_score = models.IntegerField()
benchmarked_at = models.DateTimeField(default=timezone.now)
provider = models.ForeignKey(Node, on_delete=models.CASCADE)
序列化程式.py
class BenchmarkSerializer(serializers.ModelSerializer):
class Meta:
model = Benchmark
fields = ['benchmark_score', 'benchmarked_at']
class NodeSerializer(serializers.ModelSerializer):
benchmark_set = BenchmarkSerializer(many=True)
class Meta:
model = Node
fields = ['earnings_total', 'node_id', 'data',
'online', 'version', 'updated_at', 'created_at', 'benchmark_set']
uj5u.com熱心網友回復:
您可以使用SerializerMethodField來獲得此結果:
class NodeSerializer(serializers.ModelSerializer):
last_benchmark = SerializerMethodField('get_benchmark')
class Meta:
model = Node
fields = ['earnings_total', 'node_id', 'data',
'online', 'version', 'updated_at', 'created_at', 'last_benchmark ']
def get_benchmark(self, node):
benchmark = Benchmark.objects.last()
serializer = BenchmarkSerializer(instance=benchmark , many=True)
return serializer.data
要繼續,您在序列化程式中創建一個新欄位,該欄位回傳使用BenchmarkSerializer.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/360193.html
上一篇:如何通過pk過濾洗掉模型
