首页 > 代码库 > 完善Article表,增加分类,和详细页面

完善Article表,增加分类,和详细页面

我们为一个web应用增加新功能时的步骤是:修改model.py,更新数据库,然后编写视图函数来处于http请求,接着修改模板用于显示内容。如果增加了新的模板,就要增加 新的url。

我们的Article表中目前就存了标题,文章内容,和创建时间,这肯定是远远不够的,现在我们要给Article表增加更多的内容~以下是改变后的内容,我们增加了修改时间,分类,和摘要,分类是作为一个外键。外键是一种一对多的形式,就是一篇文章对应一个分类,而一个分类下可以有多篇文章,我们也创建了另一个类别的表。

class Article(models.Model):
    title = models.CharField(‘标题‘, max_length=100)
    content = models.TextField(‘正文‘)
    create_time = models.DateTimeField(‘创建时间‘, auto_now_add=True)
    last_modified_time = models.DateTimeField(‘修改时间‘, auto_now=True)
    abstract = models.CharField(‘摘要‘, max_length=54, blank=True, null=True,
                                help_text="可选,如果为空摘取正文的前54个字符")
    category = models.ForeignKey(‘Category‘, verbose_name=‘分类‘,
                                 null=True,
                                 on_delete=models.SET_NULL)    def __unicode__(self):
        return self.title    class Meta:#Meta包含许多的选项,这里的ordering表示排序,‘-‘表示逆序,我们以创建时间排序,你也可以以修改时间排序
        ordering = [‘-create_time‘] 


class Category(models.Model):
    name = models.CharField(‘类名‘, max_length=20)
    create_time = models.DateTimeField(‘创建时间‘, auto_now_add=True)
    last_modified = models.DateTimeField(‘x修改时间‘, auto_now=True)    def __unicode__(self):
        return self.name

然后我们更新数据库:

python manage.py makemigrations

因为新增的修改时间没有提供默认值,在更新数据库的时候会提示你增加一个默认值,按照提示修改就可以了。

python manage.py migrate

接下来修改视图,因为我们增加了一个分类的表,我们要从数据库读取文章所有分类,所以我们在给index函数返回的字典增添一个条目:

#encoding:utf-8from django.shortcuts import renderfrom .models import Article, Category   #我们要先导入我们新增的这个表def index(request):
    article_list = Article.objects.all()
    category_list = Category.objects.all().order_by(‘name‘)    return render(request, ‘article/index.html‘, {‘article_list‘: article_list, ‘category_list‘:category_list})

我们打开后台,在项目目录下,有manage.py的目录下打开命令行,运行

python manage.py runserver

访问127.0.0.1:8000,我们发现并没有什么变化,我们进后台看下,访问127.0.0.1:8000/admin/

我们进入文章编辑界面,就会在最下面看到多了两个东东,一个是摘要,一个是分类,但是分类里面什么都木有,那我们怎么增添分类呢?只用把Category在admin后台注册一下就好~

from django.contrib import adminfrom .models import Article, Categoryfrom .forms import BlogForm#这个BlogForm是我们上个博客开头提到的pagedownclass BlogAdmin(admin.ModelAdmin):
    form = BlogForm
admin.site.register(Article, BlogAdmin)
admin.site.register(Category)

然后我们就可以创建条目并且给文章增加上条目了~


完善Article表,增加分类,和详细页面