004.定制后台和模型修改

1.定制admin后台

按照之前的默认界面,登录后是下面的界面:


下面就开始定制后台界面。

1-1.设置模型__str__

注意: str左右是两个_线
首先在创建的app文件夹下的models.py中添加内容:

from django.db import models


# Create your models here.
class Article(models.Model):
    title = models.CharField(max_length=30)
    content = models.TextField()


    def __str__(self):
        return '<Article: %s>' %(self.title)

保存后,进入后台界面:

1-2.定制admin

由于后面会涉及模型与模型的引用,所以用__str__来显示文章内容并不合适。我们需要在admin.py来进行修改。

from django.contrib import admin
from .models import Article
# Register your models here.


class ArticleAdmin(admin.ModelAdmin):
    list_display = ('id', 'title', 'content')
    ordering = ('id',)


admin.site.register(Article, ArticleAdmin)

注:list_display和ordering是已经内置的,可以用元组也可用列表,这里使用元组形式,因为内容为不可变。list_display是设置显示的内容,ordering是设置排序,不添加默认倒序或者在排序规则id前添加-号。


上面代码也可以通过修饰器来实现:
from django.contrib import admin
from .models import Article
# Register your models here.


@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
    list_display = ('id', 'title', 'content')
    ordering = ('id',)

2.修改模型

修改模型需要更新数据库才可以。
修改之前最好备份一下数据库文件,防止操作失误等问题。如图:

编辑models.py文件:

from django.db import models


# Create your models here.
class Article(models.Model):
    title = models.CharField(max_length=30)
    content = models.TextField()
    created_time = models.DateTimeField()

    def __str__(self):
        return '<Article: %s>' % (self.title)

这里修改完成后需要更新数据库,如果不进行更新,打开就会报错。


更新数据库的命令为:

python manage.py makemigrations

python manage.py migrate

这时如果直接执行第一条命令,由于models.py中没有设置默认值,在执行后会出现一下情况:

1为输入一个有效值为默认值;
2为取消本次操作在models.py中添加默认值


现在演示用1的方式,输入1然后回车,在命令行中输入

timezone.now
这样就设置了时间的默认值,但是这个命令时根据美国的时间来计算的,所以与当前时间会相差8小时。


如果要提前设置默认值时,在models.py中添加:
from django.utils import timezone
created_time = models.DateTimeField(default=timezone.now)

然后再执行数据库更新的两个语句。


另外,在models.py中
created_time = models.DateTimeField()

括号里可以添加
auto_now_add=True
可以实现创建文章后自动添加当前时间。
添加后同样要更新数据库。


添加最后修改时间字段,同创建字段一样。加入语句:
last_updated_time = models.DateTimeField(auto_now=True)

这样就实现了最后修改时,自动更新改字段的时间。
记得在admin.py中修改list_display将created_time和last_updated_time添加进去


添加作者author和是否删除字段,这里与前面不同的地方在于,django里内置了关于作者的相关设置直接导包即可:
from django.db import models
from django.contrib.auth.models import User


# Create your models here.
class Article(models.Model):
    title = models.CharField(max_length=30)
    content = models.TextField()
    created_time = models.DateTimeField(auto_now_add=True)
    last_updated_time = models.DateTimeField(auto_now=True)
    author = models.ForeignKey(User, on_delete=models.DO_NOTHING(),default=1)
    is_deleted = models.BooleanField(default=False)
    
    def __str__(self):
        return '<Article: %s>' % (self.title)

在使用is_deleted字段时,如果标记了已删除,同时要求界面中只显示未删除的文章,在views.py中修改语句:

articles = Article.objects.all()

改为:

articles = Article.objects.filter(is_deleted=False)

这样标记已删除的文章就不会显示。

注:在settings.py文件中将 TIME_ZONE=‘UTC’
改为
TIME_ZONE=‘Asia/Shanghai’
后自动生成的时间即为中国时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值