1

我很确定我的问题不清楚,但我不知道该怎么说。

问题是:我有一个Task模型,还有一个TaskHistory模型。当我创建一个任务模型时,我想自动创建一个关联的TaskHistory对象。例如,我想在 处创建一个任务datetime.now(),其值为“example”,当我这样做时,TaskHistory会创建一个对象,其中

created_on = datetime.now()
last_modification = datetime.now()
old_value = "example"
new_value = "example".

我可以在我的Task模型的模型字段中这样做吗?

我对 Django 很陌生。

编辑:这两个模型是相互链接的,如果它是这样创建的,我的TaskHistory对象就会有。task = Task

4

3 回答 3

2

如果您指定的所有字段在 TaskHistory 模型上都可用,您可以覆盖该create()方法。

class Task(models.Model):
    #other fields snipped for brevity
    history = models.ForeignKey(TaskHistory)

    @classmethod
    def create(cls, *args, **kwargs):
        task = cls(**kwargs)
        history_kwargs = {'created_on':datetime.now(), 'last_modification':datetime.now(), 'old_value':'None', 'new_value': 'wee'}
        history = TaskHistory(**history_kwargs)
        history.save()
        task.history = history
        return task

在你看来,或者你怎么称呼它

task = Task.create(insert_values_here_for_Task)
task.save()
于 2013-05-28T08:47:51.180 回答
1

有两种方法可以做到这一点:

  1. 覆盖任务模型上的保存方法。
  2. 使用post_save信号。
于 2013-05-28T08:35:36.170 回答
0

This is how you do it by using signals:

from django.db.models.signals import post_save
from django.dispatch import receiver
from myapp.models import Task

@receiver(post_save, sender=Task)
def my_handler(sender, **kwargs):
    task=sender
    history_kwargs = {'created_on':datetime.now(), 'last_modification':datetime.now(), 'old_value':'None', 'new_value': 'wee'}
    history = TaskHistory(**history_kwargs)
    history.save()
    task.history = history
    task.save
于 2013-05-28T08:59:02.080 回答