auto_nowとauto_now_addの違い 質問する

auto_nowとauto_now_addの違い 質問する

Djangoモデルフィールドの属性で私が理解したのは

  • auto_now- Model.save() が呼び出されるたびに、フィールドの値が現在の時刻と日付に更新されます。
  • auto_now_add- レコードの作成日時で値を更新します。

私の質問は、モデルのフィールドに と の両方auto_nowauto_now_addTrue に設定されている場合、どうなるかということです。その場合は何が起きますか?

ベストアンサー1

auto_now優先されます(当然、フィールドは毎回更新されますが、auto_now_add作成時にのみ更新されるため)。DateField.pre_save方法:

def pre_save(self, model_instance, add):
    if self.auto_now or (self.auto_now_add and add):
        value = datetime.date.today()
        setattr(model_instance, self.attname, value)
        return value
    else:
        return super().pre_save(model_instance, add)

ご覧のとおり、auto_nowが設定されている場合、または両方auto_now_addが設定されていてオブジェクトが新規である場合、フィールドには現在の日付が渡されます。

同じDateTimeField.pre_save:

def pre_save(self, model_instance, add):
    if self.auto_now or (self.auto_now_add and add):
        value = timezone.now()
        setattr(model_instance, self.attname, value)
        return value
    else:
        return super().pre_save(model_instance, add)

おすすめ記事