0
我试图过滤属于某个主题的帖子。我可以在模型中看到多对多的关系。问题是我不知道如何过滤。通常情况下,我会通过ID来做到这一点,但那并不奏效。如何过滤使用类的多对多关系(Python/Django)
型号:
class Theme(models.Model):
title = models.CharField(max_length=200)
slug = models.SlugField(_('slug'), max_length=255, null=True, blank=True)
text = models.TextField()
created_date = models.DateTimeField(
default=timezone.now)
image = FilerImageField()
def publish(self):
self.save()
def __unicode__(self):
return self.title
class Post(models.Model):
writer = models.ForeignKey(Author, blank=True, null=True)
title = models.CharField(max_length=200)
text = models.TextField()
created_date = models.DateTimeField(
default=timezone.now)
published_date = models.DateTimeField(
blank=True, null=True)
themes = models.ManyToManyField(Theme)
def publish(self):
self.published_date = timezone.now()
self.save()
def __unicode__(self):
return self.title
浏览:
from .models import Theme, Post
from django.views.generic import ListView, DetailView
class ThemesOverview(ListView):
"""
Overview of all themes
"""
model = Theme
template_name = 'content/theme_list.html'
def get_queryset(self):
queryset = Theme.objects.all()
return queryset
class ThemePostsOverview(ListView):
"""
Overview of all posts within a theme
"""
model = Post
template_name = 'content/theme_posts_list.html'
def get_context_data(self, **kwargs):
# Call the base implementation first to get a context
context = super(ThemePostsOverview, self).get_context_data(**kwargs)
slug = self.kwargs['theme']
theme = Theme.objects.get(title=slug)
context['theme'] = theme
return context
def get_queryset(self):
queryset = Post.objects.all()
return queryset
正如你可以看到我目前呈现的所有帖子,而不是只正如我们所说的属于主题
'theme.post_set.all()'无论你需要它,更多的信息在https://docs.djangoproject.com/en/1.10/topics/db/examples/ many_to_many /#多对多关系 – Bitonator
@Bitonator我假设我需要将查询集更改为'queryset = Theme.post_set.all()'。这给了我以下错误:'类型对象'主题'没有属性'post_set'' –
你需要更清楚一点。什么queryset? *你究竟想要过滤什么?不,这不是Bitonator所说的:他说要使用'theme.post_set.all()',其中'theme'是Theme的一个实例。 –