一、Admin管理
1.1 创建超级用户 createsuperuser
(venv) E:\PythonLearn\djangoDemo\helloDjango>python manage.py createsuperuser
Username (leave blank to use 'sun'): admin
Email address: admin@kunking.com
Password:
Password (again):
The password is too similar to the email address.
This password is too short. It must contain at least 8 characters.
This password is too common.
Password:
Password (again):
The password is too similar to the email address.
Password:
Password (again):
Superuser created successfully.
1.2 调整应用的默认语言和时区
# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans'
# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Shanghai'
1.3 配置 helloDjango/settings.py
urlpatterns = [ path('admin/', admin.site.urls), ]
1.4 启动后登录: http://127.0.0.1:8000/admin
二、admin站点管理
2.1 配置Model类属性
class UserEntity(models.Model): name = models.CharField(max_length=20, verbose_name='账号') age = models.IntegerField(default=0, verbose_name='年龄') phone = models.CharField(max_length=11, verbose_name='手机号', blank=True, null=True) class Meta: db_table = 't_user' verbose_name = '客户管理' # 设置复数的表示方式 verbose_name_plural = verbose_name def __str__(self): return self.name
2.2 编写mainapp/admin.py; 配置后台管理的属性
class UserAdmin(admin.ModelAdmin):
list_display = ('id', 'name', 'phone')
# 将模型添加到站点中
admin.site.register(UserEntity, UserAdmin)
2.3 添加分页、过滤器、搜索框条件; 字段名称
class UserAdmin(admin.ModelAdmin):
list_display = ('id', 'name', 'phone') # 列表中显示的字段
list_per_page = 2 # 每页显示的记录数量
list_filter = ('id', 'phone') # 过滤器
search_fields = ('id', 'phone') # 搜索关键字的字段
blank=True # 站点的表单字段值可以为空
null=True # 数据库的字段可以为空
name = models.CharField(max_length=20, verbose_name='账号')
age = models.IntegerField(default=0, verbose_name='年龄')
phone = models.CharField(max_length=11, verbose_name='手机号', blank=True, null=True)
三、 案例: 水果管理
3.1 定义Models
class CategoryEntity(models.Model):
name = models.CharField(max_length=20, verbose_name='分类名称')
order_num = models.IntegerField(verbose_name='排序')
def __str__(self):
return self.name
class Meta:
db_table = 't_category'
ordering = ['-order_num'] # 排序字段,- 表示降序
verbose_name = '水果分类'
verbose_name_plural = verbose_name
class FruitEntity(models.Model):
name = models.CharField(max_length=20, verbose_name='水果名称')
price = models.FloatField(verbose_name='价格')
source = models.CharField(max_length=30, verbose_name='原产地')
category = models.ForeignKey(CategoryEntity, on_delete=models.CASCADE)
class Meta:
db_table = 't_fruit'
verbose_name = '水果表'
verbose_name_plural = verbose_name
3.2 定义后台管理ModelAdmin
class CategoryAdmin(admin.ModelAdmin):
list_display = ('id', 'name', 'order_num')
class FruitAdmin(admin.ModelAdmin):
list_display = ('name', 'source', 'price', 'category')
# 将模型添加到站点中
admin.site.register(CategoryEntity, CategoryAdmin)
admin.site.register(FruitEntity, FruitAdmin)
3.3 添加数据报错
环境: Python3.9 Django=2.0.1
django.db.utils.OperationalError: no such table: main.auth_user__old
# 升级Django到 2.1.5
(venv) E:\PythonLearn\djangoDemo\helloDjango>pip install Django==2.1.5
# 删除mainapp/migrations 目录 和 db.sqlite3 文件
# 重新迁移数据
(venv) E:\PythonLearn\djangoDemo\helloDjango>python manage.py makemigrations
(venv) E:\PythonLearn\djangoDemo\helloDjango>python manage.py migrate
(venv) E:\PythonLearn\djangoDemo\helloDjango>python manage.py makemigrations mainapp
(venv) E:\PythonLearn\djangoDemo\helloDjango>python manage.py migrate mainapp