Django
モデルフィールドの属性で私が理解したのは
auto_now
- Model.save() が呼び出されるたびに、フィールドの値が現在の時刻と日付に更新されます。auto_now_add
- レコードの作成日時で値を更新します。
私の質問は、モデルのフィールドに と の両方auto_now
がauto_now_add
True に設定されている場合、どうなるかということです。その場合は何が起きますか?
ベストアンサー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
が設定されていてオブジェクトが新規である場合、フィールドには現在の日付が渡されます。
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)