python - Django DRF 在序列化程序中获取 ForeignKey 值
问题描述
我正在尝试在我的序列化程序中检索Benchmarks
与 a 相关的所有内容Node
,但我不太确定如何检索它们。我需要做某种反向外键查找吗?也许我的模型制作不正确?
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', ]
解决方案
您可以为模型定义序列化程序Benchmarks
:
class BenchmarkSerializer(serializers.ModelSerializer):
class Meta:
model = Benchmarks
fields = ['benchmark_score', 'benchmarked_at']
然后我们可以在以下位置使用该序列化程序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']
注意:通常 Django 模型被赋予一个单数名称,所以
Benchmark
而不是.Benchmarks
推荐阅读
- sql-server - 使用格式文件和 dat 文件批量插入
- bash - 通过命令行检查 BitBucket 存储库是否存在
- spring-boot - 带有 Rest 请求和 Thymeleaf 的 Springboot 语言环境
- powershell - 从其他文件导入和导出类
- wordpress - 如何向 WooCommerce 添加默认计费标题?
- haproxy - 添加从查询参数中获取的标题
- typescript - 映射类型似乎不适用于泛型
- java - 在片段中获取结果的问题
- vba - 插入单元格值性能
- android - Android - 是否可以以编程方式访问 androidTest 和测试文件夹中的仪器测试和单元测试类?