Django论坛开发:如何自动设置帖子所属thread,无需用户手动选择
实现步骤
1. 修改路由配置(urls.py)
给创建回复的路由新增thread_pk参数,用于传递当前主题帖的ID:
path('', homeView, name='forum-home'), path('create-thread/', ThreadCreateView.as_view(), name='create-thread'), # 新增带主题ID参数的回复创建路由 path('create-post/<int:thread_pk>/', PostCreateView.as_view(), name='create-post'),
2. 修改回复创建视图(views.py)
在PostCreateView中获取路由传递的主题ID,自动关联到新建的回复上,无需用户手动选择:
首先在文件头部导入依赖:
from django.shortcuts import get_object_or_404
修改视图逻辑:
class PostCreateView(CreateView): model = Post # 保持无需显示thread字段的配置 fields = ['title', 'content'] def form_valid(self, form): # 从路由参数中获取对应的主题对象,不存在则返回404 thread = get_object_or_404(Thread, pk=self.kwargs['thread_pk']) form.instance.user = self.request.user # 自动关联当前主题 form.instance.thread = thread return super().form_valid(form)
3. 修改模板按钮链接(home.html)
把「在本主题下发布回复」按钮的跳转链接替换为带当前主题ID的路由:
<!-- 替换原来的href="#" --> <a href="{% url 'create-post' thread_pk=thread.pk %}" class="btn btn-primary">Add a post to this thread</a>
可选优化
如果希望用户发布回复后直接跳转回当前主题页,可以修改Post模型的get_absolute_url方法:
def get_absolute_url(self): return reverse('thread-view', kwargs={'pk': self.thread.pk})
内容的提问来源于stack exchange,提问作者Cameron Samek
相关产品推荐
相关产品推荐

