【问题标题】:List posts that fall under a particular catgeory in Django 1.9列出属于 Django 1.9 中特定类别的帖子
【发布时间】:2016-04-12 06:38:33
【问题描述】:

我正在写一个类似项目但不同的博客,我最近开始学习 Django。所以,在我的应用程序中,我们也有类别和标签。现在有一个 Entry 模型,它与 Category 和 Tag 都具有 ManyToMany 关系。现在我正在尝试获取属于特定类别的所有条目,这是我们在博客中拥有的类似功能。

以下是我的标签和类别模型。

class CategoryQuerySet(models.QuerySet):    
    def category_menu(self):
        return self.filter(intopmenu=True)
    def top_catgories(self):
            return self.order_by("views")[:5]    

class Category(models.Model):
    name = models.CharField(max_length=50, unique=True)
    views = models.IntegerField(default=0)
    intopmenu = models.BooleanField(default=False)
    created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now=True)
    slug = models.SlugField(unique=True)

    objects = CategoryQuerySet.as_manager()

    def save(self, *args, **kwargs):
        self.slug = slugify(self.name)
        super(Category, self).save(*args, **kwargs)

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = "Entry Category"
        verbose_name_plural = "Entry Categories"
        ordering = ["created"]

class Tag(models.Model):
    name = models.CharField(max_length=20)
    slug = models.SlugField(max_length=200, unique=True)

    def __str__(self):
        return self.slug

以下是我的入门模型。

class EntryQuerySet(models.QuerySet):

    def published(self):
        return self.filter(publish=True)

    def most_liked(self, num):
        return self.order_by("-likes")[:num]

    def most_views(self, num):
        return self.order_by('-views')[:num]

class Entry(models.Model):
    image = models.ImageField(upload_to='entries_images/', null=True)
    image_alt = models.CharField(max_length=200, blank=True)
    name = models.CharField(max_length=50, blank=True)
    text = models.CharField(max_length=500, unique=True)
    views = models.IntegerField(default=0)
    likes = models.IntegerField(default=0)
    publish = models.BooleanField(default=True)
    created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now=True)
    source = models.URLField(blank=True)
    slug = models.SlugField(unique=True)

    categories = models.ManyToManyField(Category)
    tags = models.ManyToManyField(Tag)
    objects = EntryQuerySet.as_manager()

    def save(self, *args, **kwargs):
        self.slug = slugify(self.name)
        super(Entry, self).save(*args, **kwargs)

    def __str__(self):
        return self.text

    class Meta:
        verbose_name = "Entry"
        verbose_name_plural = "Entries"
        ordering = ["created"]

在我的 urls.py 中,我有以下 url 来查看属于特定类别的所有条目。

url(r'^category/(?P<category_slug>[\w\-]+)/$', views.category, name='category'),

显然,我不明白如何编写视图来检索属于特定类别或标签的所有条目的列表。任何帮助将不胜感激。我确实在网上参考了许多关于我的问题的博客文章,并且还搜索了 SO,1 是我发现的一个类似问题,但这并没有太大帮助。

【问题讨论】:

    标签: python django python-3.x django-models django-views


    【解决方案1】:

    尝试:

    def category(request,category_slug):
        category = get_object_or_404(Category,slug=category_slug)
        return render(request,'template_name.html',{'category':category,'posts':category.entry_set.all()})
    

    更多关于https://docs.djangoproject.com/en/1.9/topics/db/examples/many_to_many/的信息

    【讨论】:

    • 是的,行得通。非常感谢,也很抱歉,因为我应该看起来正确。顺便说一句,一旦我们得到所有帖子的列表,你能告诉我如何根据它们的创建日期对它们进行排序。
    • category.entry_set.all().order_by('field_name') 必须有效
    猜你喜欢
    • 2020-01-07
    • 2021-08-24
    • 1970-01-01
    • 2011-11-13
    • 2015-10-01
    • 1970-01-01
    • 2014-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多