python - 如何在一个视图中拥有来自两个模型的两个对象
问题描述
我正在编写 django 博客应用程序,但我有问题如何在 Post 视图中获取 Comment 对象。使用 post 对象没有问题,因为我编写self.get_object()
并完成了。问题是我如何获得评论对象。下面是我的代码。
这里是视图。
class PostDetail(generic.DetailView, FormMixin):
template_name = 'post_detail.html'
context_object_name = 'post'
model = Post
form_class = CommentForm
这是帖子模型:
class Post(models.Model):
author = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(max_length=200)
text = RichTextUploadingField()
这是评论模型
class Comment(models.Model):
author = models.ForeignKey(User, on_delete=models.CASCADE)
post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='comments')
text = RichTextUploadingField()
解决方案
我不知道你到底想做什么!但从被问到的情况下,我认为一种方法是使用这样的基于函数的视图(我没有尝试过,但我希望这个或类似的东西为你工作):
from django.shortcuts import render
def myview(request):
post_objs = Post.objects.all()
comment_objs = Comment.objects.all()
mydict = {'posts':post_obj, 'comments':comment_obj}
return render(request, 'myapp/myhtml.html', context=mydict)
考虑到您拥有的一对多关系,您还可以更进一步并传递您想要的确切数据
def myview(request, pk):
the_post_obj = Post.objects.get(pk=pk)
comment_objs = Comment.objects.filter(post=the_post_obj)
mydict = {'the_post':the_post_obj,'comments':comment_objs}
return render(request, 'myapp/myhtml.html', context=mydict)
使用您编写的任何视图,您现在可以转到 HTML 文件并以您想要的任何方式显示查询的数据。例如,您可以显示单个帖子的所有评论。不要忘记使用我上面写的第二个视图,您必须将帖子 PK 发送到视图(例如,您可以将其放在 HTML 文件中的链接中,以便当用户单击帖子时(即超链接),帖子PK经过查看功能,显示相关数据)。
推荐阅读
- ios - iOS 13:调整 UITabBar 高度不起作用
- java - 如何将地图转换为对象?
- mysql - 在 phpMyAdmin 中搜索和替换序列化对象
- visual-studio - Flutter 网络视觉工作室
- regex - 制作一个可以使用可变数量参数的 vscode 片段
- python - 如何使用python一次运行多个计算?
- python - 由于 csv 文件中的双引号,Python pandas read_csv 无法正确读取行
- gatsby - 如何覆盖来自 Gatsby 主题的 createPages 查询?
- user-interface - 干扰 MATLAB 回调的传入串行数据
- java - 泛型 - 定义地图
, MyClassB > 确保两者?是相同的?