Как обновить дату последнего сообщения в модели Django
У меня есть две модели, в которых пользователи создают пост и комментируют этот пост. Когда пользователи комментируют это сообщение, я хочу обновить дату last_message в модели UserPost. Если комментариев еще нет, я хочу, чтобы дата last_message по умолчанию была установлена на дату создания поста.
Модели:
class UserPosts(models.Model):
postTitle = models.CharField(max_length=100, verbose_name="Title")
postContent = RichTextField(null=True, verbose_name="Content")
created_at = models.DateTimeField(
auto_now_add=True, verbose_name="Date of upload")
last_message = ?????????????????
def __str__(self):
return self.postTitle
class UserMessages(models.Model):
postMessages = RichTextField(null=True, verbose_name="Message")
post = models.ForeignKey(
UserPosts, on_delete=models.CASCADE, verbose_name="Linked Post", null=True)
created_at = models.DateTimeField(auto_now_add=True, verbose_name="Date of upload")
Я не смог найти ничего относящегося к этой теме в документации Django, Google и других источниках.
Если есть возможность не иметь его в базе данных, можно просто вычислить его в тот момент, когда он вам нужен. Для этого вы можете использовать свойство модели:
class UserPosts(models.Model):
postTitle = models.CharField(max_length=100, verbose_name="Title")
postContent = RichTextField(null=True, verbose_name="Content")
created_at = models.DateTimeField(auto_now_add=True, verbose_name="Date of upload")
@property
def last_message(self):
last_message = self.usermessages_set.order_by('-created_at').first()
if last_message:
return last_message.created_at
return self.created_at
Таким образом, если у сообщения еще нет сообщения, оно получит свое собственное поле created_at
. Затем вы можете использовать его как свойство:
post = UserPosts.objects.first()
print(post.last_message)
Также рассмотрите возможность использования cached_property
, если вы планируете использовать это поле в представлении несколько раз.