默认django模型字段,其值来自前一个条目

时间:2013-01-01 21:45:09

标签: python django forms django-models field

我有一个应该跟踪时间的应用程序,其中一个条目(称为begin_sec)应该具有(或默认)前一个条目变量的值(称之为end_sec)(除非它是第一个条目a特殊情况,只会发生一次)。

这是我的模特

TimeLog(model.Model);
    begin_sec= models.DateTimeField( auto_now=False,
                                   auto_now_add=False,
                                   default=?
                                   help_text="YYYY-MM-DD HH-MM-SS")
    end_sec = models.DateTimeField( auto_now=False,
                                   auto_now_add=False,
                                   default=?
                                   help_text="YYYY-MM-DD HH-MM-SS")

    ... other parts of the model.          

所以当我添加这种类型的新条目时,我第一次以用户身份打开应用程序时我可以将开始时间默认为now(),并且我可以选择end_sec,但是第二次及以后我希望begin_sec是/ default到最后一个条目的end_sec。 我将如何实现这一目标?

1 个答案:

答案 0 :(得分:1)

在这种情况下,请勿指定default值。最好的地方是模型形式save方法:

class TimeLogForm(forms.ModelForm):
    class Meta:
        exclude = ['begin_sec']
        model = TimeLog

    def __init__(self, *args, **kw):
        super(TimeLogForm).__init__(self, *args, **kw)

    def save(self, *args, **kw):
        instance = super(TimeLogForm, self).save(commit=False)
        last_entry = TimeLog.objects.all().order_by('-id')[0]
        if last_entry:
            instance.begin_sec = last_entry.begin_sec
        else:
            # this is the very first record do something
            pass
        instance.save()
        return instance

此外,您无需为这两个字段设置auto_now=Falseauto_now_add=False,默认情况下为False