对不起英语。
我有一个主题,有在这个主题的帖子。我需要从当前的主题获得帖子
我试图通过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
对象最多一个。