我有一个应该跟踪时间的应用程序,其中一个条目(称为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。 我将如何实现这一目标?
答案 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=False
和auto_now_add=False
,默认情况下为False
。