0

私は時間を追跡することになっているアプリを持っています、そしてエントリの1つ(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を選択できますが、2回目以降は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=Falseまた、両方のフィールドにandを設定する必要はありません。auto_now_add=FalseデフォルトではFalseです。

于 2013-01-01T22:09:48.857 に答える