2024-02-28 06:10:10.889217だめだかわらない、モデルでデフォルトの日時を timezone.localtime に設定しても、実際にはモデルが最初に読み込まれたときの日時が保存される?

2024年6月15日

おっしゃる通りです。モデルでデフォルトの日時を timezone.localtime に設定しても、実際にはモデルが最初に読み込まれたときの日時が保存されます。そのため、モデルが読み込まれた時点のローカル時刻が全てのレコードに適用されます。

その代わりに、新しいレコードが作成されるたびに現在の日時を取得して保存するように、モデルの save メソッドをオーバーライドする方法があります。

以下は修正したコードです:

python
from django.db import models
from django.utils import timezone

class Scrayping_Data(models.Model):
    # 他のフィールドは省略

    created_at = models.DateTimeField()
    updated_at = models.DateTimeField()

    def save(self, *args, **kwargs):
        if not self.created_at:
            self.created_at = timezone.localtime()
        self.updated_at = timezone.localtime()
        super().save(*args, **kwargs)

    def __str__(self):
        return self.product_name

このようにすると、save メソッドが呼び出されるたびに、新しいレコードが作成される場合は現在のローカル時刻が created_at に設定され、updated_at は常に現在のローカル時刻で更新されます。

未分類

Posted by ぼっち