web-dev-qa-db-ja.com

auto_nowとauto_now_addの違い

Django modelsフィールドの属性で理解したことは

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

私の質問は、モデルに提出されたファイルにauto_nowおよびauto_now_add Trueに設定しますか?その場合はどうなりますか?

7
Sukumar

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)
7
awesoon