【问题标题】:calculated property in Django model with QuerySet使用 QuerySet 在 Django 模型中计算属性
【发布时间】:2020-03-10 06:32:35
【问题描述】:

我正在开发一个使用 Django 后端的前端。 我想向一个 Django 模型添加一个新的计算属性,其中包含 amCharts 的图表数据。

经过一些研究,我发现使用@property 将是这里的方法。

但是,所有实现 atm 的视图集都使用查询集,我在一些谷歌搜索后发现它忽略了计算的属性。

  1. 有没有办法保留查询集并让它使用我的计算属性?
  2. 如果不是:手动写出所有查询集操作会解决问题吗?

代码:

# 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() 方法中执行的实际模型和计算,我们也许可以看到您是否可以直接在数据库查询中检索它。

标签: python django amcharts


【解决方案1】:

根据@dirkgroten 的建议,我使用SerializerMethodField 在 django 发布我的结果之前添加新的 json 字段。

【讨论】:

    猜你喜欢
    • 2017-06-24
    • 2017-12-12
    • 2017-05-02
    • 1970-01-01
    • 1970-01-01
    • 2019-08-26
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多