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的一個實例。 –