django - 如何将第二个(不同的)模型实例发送到模板
问题描述
问题 - 我正在显示一个表单,允许用户添加关于现有帖子的评论。我还想在同一页面(渲染模板)上显示现有帖子(实例)。模板的模型是接受评论的模型(与帖子不同)。如何将帖子数据的模型实例传递给模板,以便我也可以显示帖子?
注意 - 我还需要 post 实例,因为为了将评论存储在数据库中,它需要链接到特定的 post id。
这可能很简单,但我遗漏了一些明显的东西——欢迎指出正确的文档。我只是在学习 Django,所以我还在学习我的方式。
细节:
我的模型如下(models.py):
class Post(models.Model):
type = models.ForeignKey(
PostType,
on_delete=models.PROTECT,
related_name='posts',
default=1
)
title = models.CharField(max_length=100)
body = models.TextField()
author = models.ForeignKey(
get_user_model(),
on_delete=models.PROTECT,
related_name='posts'
)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('post_detail', args=[str(self.id)])
class Comment(models.Model):
post = models.ForeignKey(
Post,
on_delete=models.CASCADE,
related_name='comments',
)
body = models.TextField(max_length=1000)
author = models.ForeignKey(
get_user_model(),
on_delete=models.PROTECT,
)
def __str__(self):
return f'{self.body[:75]}...'
def get_absolute_url(self):
return reverse('post_detail', args=[str(self.post.id)])
我在 urls.py 中有我的 URL 路由:
urlpatterns = [
path('post/<int:pk>/comment/new/', CommentCreateView.as_view(), name='comment_new'),
path('post/new/', PostCreateView.as_view(), name='post_new'),
path('post/<int:pk>/', PostDetailView.as_view(), name='post_detail'),
...
]
我有我的看法(views.py):
class CommentCreateView(LoginRequiredMixin, CreateView):
model = Comment
template_name = 'comment_new.html'
fields = ['body']
def form_valid(self, form):
form.instance.author = self.request.user
return super().form_valid(form)
最后是我的模板(comment_new.html):
<div class="card post-entry">
<span class="font-weight-bold">{{ post.title }}</span>
<span class="m-3">·</span>
<span class="text-muted">{{ post.type }} by {{ post.author }} - {{ post.created|naturaltime }}</span>
{{ post.body }}
</div>
<hr>
<h2>New Comment</h2>
<hr>
<div class="post-entry-comment">
<form action="" method="post">
{% csrf_token %}
{{ form|crispy }}
<input class="btn btn-success" type="submit" value="Submit">
</form>
</div>
解决方案
我在这里寻找 get_context_data 。这是一种将附加数据传递到基于类的模板的简单方法。
推荐阅读
- linux - 使用 Ctrl+C 退出后重新连接到 linux 服务输出
- sql-server - SQL Server 2016 管理员权限限制
- python - 最有效的方法 - 为 anagrams Python 测试 2 个字符串
- r - 如何引导混合模型的 R 平方?
- python - 使用拆分条件从字符串列表中填充数据框
- unit-testing - 如何检测 JEST 在模拟的依赖库中的调用?
- sql-server - 将 Visual Studio 数据库项目对象部署到“dbo”以外的架构
- javascript - 如果在 localeCompare 函数中设置 numeric:true 会有任何变化吗
- javascript - 仅当另一个文本框包含 asp.net 中的文本时,如何使文本框变得可见?
- c - 为了提高缓存命中率,我该如何修改程序