如何更新 Django 模型中的最后一条消息日期

How do update last message date in Django model

我有两个模型,用户可以在其中创建 post 并评论 post。当用户评论此 post 我想更新 UserPost 模型上的 last_message 日期。如果还没有评论,我希望将默认 last_message 日期设置为创建 post 的日期。

型号:

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

EDİT

我的观点:

def forums(request,forumname):
   forum = Category.objects.get(categoryName=forumname)
   post2 = UserPosts.objects.all().filter(category=forum.id).order_by("- 
                     usermessages").filter(category=forum.id)
   context = {
      'posts': post2,
   }
   return render(request, "_forums.html",context)

我的模板:

    {% for post in posts %}
       <div class="mb-2 text-muted">
           {{post.last_message | naturaltime}}
       </div>
    {% endfor %}

我在 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

因此,如果 post 还没有消息,它将获得自己的 created_at 字段。然后你可以像 属性:

一样使用它
post = UserPosts.objects.first()
print(post.last_message)

如果您计划在一个视图中多次使用此字段,也请考虑使用 cached_property