0

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

这是我的模型

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 为/默认为最后一个条目的 end_sec。我将如何实现这一目标?

4

1 回答 1

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.

于 2013-01-01T22:09:48.857 回答