【发布时间】:2020-03-10 06:32:35
【问题描述】:
我正在开发一个使用 Django 后端的前端。 我想向一个 Django 模型添加一个新的计算属性,其中包含 amCharts 的图表数据。
经过一些研究,我发现使用@property 将是这里的方法。
但是,所有实现 atm 的视图集都使用查询集,我在一些谷歌搜索后发现它忽略了计算的属性。
- 有没有办法保留查询集并让它使用我的计算属性?
- 如果不是:手动写出所有查询集操作会解决问题吗?
代码:
# models.py
class MyModel:
# Normal props
@property
def calced(self):
return somecalc
# views.py
class MyModelView(ModelViewSet):
serializer_class = MyModelSerializer
def get_queryset(self):
return MyModel.objects.filter(id=self.kwargs['id_pk'])
【问题讨论】:
-
你需要澄清这个问题。查询集用于从数据库中检索选定的对象。模型实例就是那些对象。模型属性是一种对象方法。它可以做任何事情,但通常它所做的大部分工作都与操纵自己的
self字段有关。 -
现在猜。您想要做的是将其他相关数据库行中的一个或多个字段附加到查询集检索到的对象,以用作属性计算的输入吗?这叫注解。请参阅 Django 查询集文档。
-
@nigel222 我想要 json 中的一个附加字段,它由视图返回,其中包含 amChart 的计算数据。计算所需的所有数据都包含在模型中。我看一下注释。
-
如果您向我们展示您在
calced()方法中执行的实际模型和计算,我们也许可以看到您是否可以直接在数据库查询中检索它。