Django实现文章三级分类。并显示指定分类
时间: 2024-02-13 21:06:03 浏览: 25
要在Django中实现文章的三级分类,可以使用模型中的外键关系和递归关系。例如,可以创建一个名为Category的模型,用于存储文章分类,其中包括字段name、parent和level,用于存储分类名、父分类和分类级别。然后,在Article模型中添加一个外键,将每篇文章与其所属的分类相关联。
示例代码如下:
```python
from django.db import models
class Category(models.Model):
name = models.CharField(max_length=100)
parent = models.ForeignKey('self', null=True, blank=True, related_name='children', on_delete=models.CASCADE)
level = models.IntegerField(default=1)
class Article(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
category = models.ForeignKey(Category, on_delete=models.CASCADE)
```
在上述代码中,Category模型中的parent字段是一个自关联的外键,表示一个分类可以有一个父分类,且一个父分类可以有多个子分类。同时,还添加了一个level字段,用于存储分类的级别。
要查询指定分类下的所有文章,可以使用Django的ORM查询语句。例如,要查询分类名为“技术”的所有文章,可以使用以下代码:
```python
from myapp.models import Article, Category
category = Category.objects.get(name='技术')
articles = Article.objects.filter(category__in=category.get_descendants(include_self=True))
```
在上述代码中,首先使用get()方法获取名为“技术”的分类,然后使用get_descendants()方法获取该分类的所有后代分类(包括自身),并将其作为filter()方法的参数进行过滤。
最后,可以使用查询结果来显示文章列表。例如,可以在模板中使用以下代码:
```html
{% for article in articles %}
<div>
<h2>{{ article.title }}</h2>
<p>{{ article.content }}</p>
</div>
{% endfor %}
```
在上述代码中,使用了模板语言循环遍历所有查询结果,显示文章的标题和内容。