Django,从主题中获取所有帖子

  • 本文关键字:获取 Django python django
  • 更新时间 :
  • 英文 :


对不起英语。

我有一个主题,有在这个主题的帖子。我需要从当前的主题获得帖子

我试图通过slug获得一个主题,然后检查主题id并显示该id下的所有帖子,但我不知道是如何做到的

class Themes(MultipleModelView):
template_name = 'site/themes.html'
def get_context_data(self, **kwargs):
context = super(MultipleModelView, self).get_context_data(**kwargs)
context['modeltwo'] = Theme.objects.all()
context['modelone'] = Subject.objects.all()
context['modelthree'] = Theme.objects.filter(slug=self.kwargs.get('slug'))
context['modelfour'] = Post.objects.filter(where_we_are_id = 1)
return context

模型主题

class Theme(models.Model):
title = models.CharField(max_length=50,verbose_name="Название")
subject = models.ForeignKey(Subject,on_delete=models.CASCADE,related_name='subject')
slug = models.SlugField(null=True,verbose_name='ссылка на страницу')
class Meta:
ordering = ['title']
verbose_name_plural = 'Темы'
verbose_name = 'Тема'
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('article_detail', kwargs={'slug': self.slug})

后模型

class Post(models.Model):
user = models.ForeignKey(User,on_delete=models.CASCADE,null=True,blank=True)
title = models.CharField(max_length=50,verbose_name="Название")
text = models.TextField(max_length=500,verbose_name="Текст")
created_at = models.DateTimeField(auto_now_add=True, verbose_name='Дата создания')
is_published = models.BooleanField(default=True)
where_we_are = models.ForeignKey(Theme,on_delete=models.CASCADE,related_name='get_news',null=True,blank=True )

class Meta:
ordering = ['created_at']
verbose_name_plural = 'Посты'
verbose_name = 'Пост'
def __str__(self):
return self.title

Urls

from django.urls import path
from .views import MultipleModelView,Themes
urlpatterns = [
# path('abc',base.as_view(),name='themes'),
path('', MultipleModelView.as_view(), name='themes'),
path('<slug:slug>', Themes.as_view(), name='article_detail'),
]

您可以使用进行过滤

context['modelfour'] = Post.objects.filter(where_we_are__slug=self.kwargs['slug'])

或者,由于您已经检索到主题,我们可以使用:

from django.shortcuts import get_object_or_404
# …
context['theme'] = theme = get_object_or_404(Theme, slug=self.kwargs['slug'])
context['modelfour'] = Post.objects.filter(where_we_are_id=theme)

在这里,我们使用get_object_or_404(…),因为通常段塞是唯一的,因此具有给定段塞的Theme对象最多一个。

最新更新