Django-----定制后台以及修改模型
我们打开后台会发现显示的字段仅仅包含article总的字段,需要看里面的内容的话我们需要点击进去看,有没有定制的方法把定义的字段显示出来呢?
1.方法一:通过model里面修改:使用self方法返回对象类:
返回一个标题:
def __str__(self): return self.title
返回一个对象:
def __str__(self): return "<Artacire%s>"%self.title
2.方法二:在admin里面修改,这种方法比较常用。
建立一个class类:
class ArtcirleAdmin(admin.ModelAdmin): list_display = ("id","title","content",)#注意:必须设置字段为list_dispaly ordering = ("id",) admin.site.register(Artcirle,ArtcirleAdmin)
ordering是一个排序的规则:
类型的关联的外键有可能没有显示:这需要我们在 model层里面修改一下:
class Blog_type(models.Model): type_name = models.CharField(max_length = 15) def __str__(self): return self.type_name
def__str__(self):函数是为了显示后台管理的内容。
3.使用装饰器注册:
前面的注册都是使用admin.site.register()的方式注册。
这里使用装饰器的方法注册:这种写法更加清晰明了。
@admin.register(Artcirle) class ArtcirleAdmin(admin.ModelAdmin): list_display = ("id","title","content",)#注意:必须设置字段为list_dispaly ordering = ("id",)
二、添加字段
1.添加字段需要跟新一下数据库: 使用python manage.py makemigrations,和 python manage.py migrate 命令。
法一:按提示输入默认值设置。
class Artcirle(models.Model):#创建数据模型 title = models.CharField(max_length = 10) content = models.TextField() created_time = models.DateTimeField()
法二:设置默认值。需要导入:utils
from django.db import models from django.utils import timezone # Create your models here. class Artcirle(models.Model):#创建数据模型 title = models.CharField(max_length = 10) content = models.TextField() created_time = models.DateTimeField(default = timezone.now) # def __str__(self): # return self.title
法三:设值为auto_now_add 自动添加当前时间:
from django.db import models from django.utils import timezone # Create your models here. class Artcirle(models.Model):#创建数据模型 title = models.CharField(max_length = 10) content = models.TextField() created_time = models.DateTimeField(auto_now_add = True) # def __str__(self): # return self.title
2.添加最近一次修改时间 使用:auto_add
from django.db import models from django.utils import timezone # Create your models here. class Artcirle(models.Model):#创建数据模型 title = models.CharField(max_length = 10) content = models.TextField() created_time = models.DateTimeField(auto_now_add = True) created_updated_time = models.DateTimeField(auto_now = True)
3.添加一个删除的标记
on_detele = models.BooleanField(default = False)
在后台标记:默认不删除。
让删除的字段不显示在页面上:在views里面设置:filter(条件)
def artcirle_list(request): artcirles = Artcirle.objects.filter(on_detele = False) contenx = {} contenx['artcirle_list'] = artcirles return render_to_response('list.html',contenx)
4.添加作者,阅读次数:
from django.db import models from django.utils import timezone from django.contrib.auth.models import User # Create your models here. class Artcirle(models.Model):#创建数据模型 title = models.CharField(max_length = 10) content = models.TextField() created_time = models.DateTimeField(auto_now_add = True)#创建时间 created_updated_time = models.DateTimeField(auto_now = True)#跟新时间 on_detele = models.BooleanField(default = False)#删除标记 author = models.ForeignKey(User, on_delete = models.DO_NOTHING,default=1)#需要设置参数作者 reader_time = models.IntegerField(default= 0)#阅读次数 # def __str__(self): # return self.title