django - 如何将QuerySet的注释值和Model的属性字段加入Django中的一个逻辑?
问题描述
我有这种情况。我通过两种方式计算直径:QuerySet 的注释和 Model 中的属性。
class CircleQuerySet(models.QuerySet):
def annotate_diameter(self):
return self.annotate(diameter=models.F('radius')*2)
class Circle(models.Model):
radius = models.DecimalField(max_digits=11, decimal_places=2)
objects = CircleQuerySet.as_manager()
@property
def diameter(self):
return self.radius * 2
我怎样才能将这两种方式合二为一?它存在吗?
解决方案
您可以setter
为直径属性添加一个,以便在尝试添加同名注释时不会出错
@property
def diameter(self):
return self.radius * 2
@diameter.setter
def diameter(self, value):
return
至于只在一个地方进行计算,这是不可能的,因为注释是数据库指令,您仍然需要未从数据库中检索到的对象的属性。您可以通过覆盖管理器的方法将注释添加到每个查询,get_queryset
以便甚至.get()
返回带有注释的对象。
推荐阅读
- postgresql - Postgres:合并来自 JSONB 对象数组的单个值
- java - Java中的概率(AnyLogic)
- powershell - 已删除文件但未删除子文件夹
- flutter - 无法在 VSCode 中删除 Flutter 的可视化调试
- node.js - Nodejs 无法响应整个对象数组。只响应第一个元素
- javascript - 试图在 JavaScript 中用红色突出显示一个单词
- javascript - 反应自定义滑块 - 在滑块上显示气泡值
- python - 在 Windows 上 pip 安装 tensorflow 时出错
- activemq-artemis - ActiveMQ Artemis:生产者失败并出现 JMSException AMQ219016
- simplify - 从 scorm 1.2 连接到 lms