自动保存到数据库django

时间:2017-08-09 05:35:17

标签: python django django-models

我有一个简单的数据库架构:

class testModel(models.Model):
    modified_by = models.CharField(max_length=50, verbose_name="Modified by")
    modify_date = models.DateTimeField(auto_now_add=True, auto_now=False)
    week = models.DateField( verbose_name="Week date" )
    type = models.CharField(max_length=10, verbose_name="Type")
    value = models.CharField(max_length=4, verbose_name="value")

    def __unicode__(self):
        return str(self.type)

我想要做的是将每个动作保存到第二个表格中,例如testModel_history。

我知道我可以在第一个表的每个更改期间创建这样的表和导入记录,但我想问你是否有更好的方法来做到这一点?

提前致谢,

2 个答案:

答案 0 :(得分:1)

尝试使用继承的模型:

class testModel2(testModel):
    def __init__(testModelObj, self):
        #for every field: self.field_name = testModelObj.field_name

    class Meta:
        db_table = 'your_db_table' #if you want a specific one

另外在testModel中重写save方法:

#in class testModel
def save(self):
    testModel2(self).save()
    super().save()

答案 1 :(得分:0)

如果你真的试图仅保存动作历史,请使用Django简单历史记录。 https://django-simple-history.readthedocs.io/en/latest/usage.html

Allyou需要做的是将history = HistoricalRecords()添加到您需要跟踪的所有模型

例如:

class testModel(models.Model):
    modified_by = models.CharField(max_length=50, verbose_name="Modified by")
    modify_date = models.DateTimeField(auto_now_add=True, auto_now=False)
    week = models.DateField( verbose_name="Week date" )
    type = models.CharField(max_length=10, verbose_name="Type")
    value = models.CharField(max_length=4, verbose_name="value")

    history = HistoricalRecords()

    def __unicode__(self):
        return str(self.type)