[英]Django DRF get ForeignKey values in serializer
I'm trying to retrieve all Benchmarks
related to a Node
in my serializer, but i'm not too sure how to retrieve them.我正在尝试在我的序列化程序中检索与Node
相关的所有Benchmarks
,但我不太确定如何检索它们。 Would I need to do some sort of reverse foreignkey lookup?我需要做某种反向外键查找吗? Maybe my models are not made correctly?也许我的模型制作不正确?
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 Benchmarks(models.Model):
benchmark_score = models.IntegerField(default=0)
benchmarked_at = models.DateTimeField(null=True, blank=True)
provider = models.ForeignKey(Node, on_delete=models.CASCADE)
class NodeSerializer(serializers.ModelSerializer):
class Meta:
model = Node
fields = ['earnings_total', 'node_id', 'data',
'online', 'version', 'updated_at', 'created_at', ]
You can define a serializer for the Benchmarks
model:您可以为Benchmarks
模型定义序列化程序:
class BenchmarkSerializer(serializers.ModelSerializer):
class Meta:
model = Benchmarks
fields = ['benchmark_score', 'benchmarked_at']
then we can use that serializer in the NodeSerializer
:然后我们可以在NodeSerializer
使用该序列化NodeSerializer
:
class NodeSerializer(serializers.ModelSerializer):
benchmarks_set = BenchmarkSerializer(many=True)
class Meta:
model = Node
fields = ['earnings_total', 'node_id', 'data',
'online', 'version', 'updated_at', 'created_at', 'benchmarks_set']
Note : normally a Django model is given a singular name, so
Benchmark
instead of.注意:通常 Django 模型被赋予一个单数名称,因此Benchmarks
Benchmark
而不是。Benchmarks
Use HyperlinkedModelSerializer like this:像这样使用 HyperlinkedModelSerializer:
class BenchmarkSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Benchmarks
fields = ['benchmark_score', 'benchmarked_at']
class NodeSerializer(serializers.HyperlinkedModelSerializer):
benchmark_set = BenchmarkSerializer(many=True, read_only=True)
class Meta:
model = Node
fields = ['node_id', 'wallet', 'earnings_total', 'data', 'online',
'version', 'updated_at', 'created_at', 'benchmark_set']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.