如何更新 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
。
我有两个模型,用户可以在其中创建 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
。