我们为一个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)
然后我们就可以创建条目并且给文章增加上条目了~
时间: 2024-10-21 15:35:36