python - 从 Django 视图中的特定论坛类别获取线程
问题描述
这是我当前的代码。
class TopicView(ListView):
model = Thread
template_name = 'forum/topic.html'
context_object_name = 'threads'
paginate_by = 5
def get_queryset(self):
topic = get_object_or_404(Topic, id=self.kwargs.get('pk'))
return Thread.objects.order_by('-date_posted')
它应该只从特定的论坛主题中获取主题,但它会获取数据库中的所有主题。我尝试了一些方法来修复它,但这些修复似乎都不起作用。
编辑:模型。
class Topic(models.Model):
title = models.CharField(max_length=100)
slug = models.SlugField(default='test')
description = models.TextField()
icon = models.CharField(max_length=25)
class Thread(models.Model):
title = models.CharField(max_length=60)
content = models.CharField(max_length=255)
date_posted = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User, on_delete=models.CASCADE)
topic = models.ForeignKey(Topic, on_delete=models.CASCADE)
pinned = models.BooleanField(default=False)
locked = models.BooleanField(default=False)
censored = models.BooleanField(default=False)
deleted = models.BooleanField(default=False)
post_ip = models.GenericIPAddressField()
def num_replies(self):
return max(0, self.post_set.count() - 1)
def last_reply(self):
if self.post_set.count():
return self.post_set.order_by('-created')[0]
解决方案
您需要按给定主题进行过滤,因此:
class TopicView(ListView):
model = Thread
template_name = 'forum/topic.html'
context_object_name = 'threads'
paginate_by = 5
def get_queryset(self):
return Thread.objects.filter(
topic_id=self.kwargs['pk']
).order_by('-date_posted')
通过设置allow_empty
on True
,如果没有匹配此主题,它将返回 404 (如果根本不存在Thread
,这也是这种情况):Topic
class TopicView(ListView):
model = Thread
template_name = 'forum/topic.html'
context_object_name = 'threads'
paginate_by = 5
allow_empty = True # 404 if empty
def get_queryset(self):
return Thread.objects.filter(
topic_id=self.kwargs['pk']
).order_by('-date_posted')
推荐阅读
- javascript - firebaseAdmin.auth().getUser(uid) 最近非常慢
- kendo-ui - kendo grid 'save' 事件递归调用问题
- html - 在笔记本电脑平板手机的引导响应式设计方面需要帮助
- java - Moxy Xpath ::“提升”属性
- mysql - MYSQL解析地址
- ios - Flutter:设置自己的 Rest API json 文件
- mongodb - 无法使用带有身份验证的 docker 在本地 Windows 笔记本电脑上创建 mongo db 的副本集
- java - 打开包含字符串 intellij 的文件
- json - 用 Dart 解码一个奇怪的 json 文件
- angular - 从子组件Angular控制form.valid