Как я могу обновлять поле "last_updated", когда пользователь изменяет данные

Я пытаюсь сделать пользовательскую модель пользователя в django и добавить дополнительное поле "last_updated", которое должно обновлять дату и время каждый раз, когда пользователь вносит изменения или сохраняет новые данные.

class User(AbstractUser):
    username = None 
    email = models.EmailField(_('email address'), unique=True)
    photo = models.ImageField(upload_to='avatars/', null=True, blank=True)
    last_updated = models.DateTimeField(null=True, blank=True) #defining field in the model.


    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []

    objects = UserManager()

    def __str__(self):
        return self.email

Пробовали ли вы переопределить метод сохранения User:

from datetime import datetime

class User(AbstractUser):
    # rest of code

    def save(self, *args, **kwargs):
       self.last_update = datetime.now()
       super(User, self).save(*args, **kwargs)

Не проще ли использовать auto_now=True?

Таким образом, ваша модель может выглядеть следующим образом:

class User(AbstractUser):
    username = None 
    email = models.EmailField(_('email address'), unique=True)
    photo = models.ImageField(upload_to='avatars/', null=True, blank=True)
    last_updated = models.DateTimeField(auto_now=True) #defining field in the model.


    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []

    objects = UserManager()

    def __str__(self):
        return self.email

Это поможет вам иметь меньше кода и использовать встроенную функциональность Django.

Вернуться на верх