【问题标题】:How To Clone/Mutate A Model In Django Without Subclassing如何在没有子类化的情况下在 Django 中克隆/变异模型
【发布时间】:2010-11-20 03:14:51
【问题描述】:

'你好,大家好。我正在尝试基于另一个模型在 Django 中创建一个模型 - 但不是子类化或与另一个模型有数据库关系。我的原始模型看起来像这样:它存储一些带有日期/时间戳的数据。

class Entry(Model):  
    data1 = FloatField()  
    data2 = FloatField()  
    entered = DateTimeField()  

我还想使用几乎相同的模型每天汇总每个条目的数字数据。对于 DailyAvg() 变体,我们将使用 DateField() 而不是 DateTimeField(),因为每天只有一个平均值:

class EntryDailyAvg(Model):  
    data1 = FloatField()  
    data2 = FloatField()  
    entered = DateField()  

因此问题是:将有很多此类数据类需要存储在数据库中的相应日平均模型,并且定义几乎相同。我可以为每个数据类重新输入一个等效的 DailyAvg() 类的定义,但这似乎违反了 DRY,而且也是一个巨大的痛苦。我也不能有EntryDailyAvg 子类Entry,因为每次我保存一个新的EntryDailyAvg 时,Django 都会保存一个新的Entry 库。

有没有办法自动(神奇地?)生成 DailyAvg() 类?

提前致谢!

【问题讨论】:

  • 你没有继承Entry,因为...?
  • 实际上,我曾经做过一次,但忘记了每次保存子类时,也会保存父类的一个实例。我一直想知道所有额外的 Entry() 是从哪里来的——每次我保存 DailyAvg() 时都会保存它们,所以我最终所做的只是“污染”了 Entry 表。

标签: python django django-models dry aggregation


【解决方案1】:

如果您创建一个包含所有 data1 内容的 AbstractEntry 类,然后创建两个子类:Entry 和 EntryDailyAvg。

查看文档以获取有关如何告诉 django 一个类是抽象类的信息。

【讨论】:

  • 抽象类是 1.1 的新内容,不是吗?没想到。谢谢!
猜你喜欢
  • 2012-02-14
  • 2016-12-12
  • 2016-02-16
  • 2020-08-08
  • 2017-01-18
  • 1970-01-01
  • 1970-01-01
  • 2018-04-05
相关资源
最近更新 更多