courses的注册
1.注册
import xadmin
from apps.courses.models import Course, Lesson, Video, CourseResource
# xadmin允许我们不继承任何东西
class CourseAdmin(object):
list_display = ['name', 'desc', 'detail', 'degree', 'learn_times', 'students']
search_fields = ['name', 'desc', 'detail', 'degree', 'students']
list_filter = ['name', 'teacher__name', 'desc', 'detail', 'degree', 'learn_times', 'students']
list_editable = ["degree", "desc"]
class LessonAdmin(object):
list_display = ['course', 'name', 'add_time']
search_fields = ['course', 'name']
list_filter = ['course__name', 'name', 'add_time']
class VideoAdmin(object):
list_display = ['lesson', 'name', 'add_time']
search_fields = ['lesson', 'name']
list_filter = ['lesson', 'name', 'add_time']
class CourseResourceAdmin(object):
list_display = ['course', 'name', 'file', 'add_time']
search_fields = ['course', 'name', 'file']
list_filter = ['course', 'name', 'file', 'add_time']
xadmin.site.register(Course, CourseAdmin)
xadmin.site.register(Lesson, LessonAdmin)
xadmin.site.register(Video, VideoAdmin)
xadmin.site.register(CourseResource, CourseResourceAdmin)
2.models里面str重写
from datetime import datetime
from django.db import models
from apps.users.models import BaseModel
from apps.organizations.models import Teacher
# 1.设计表结构有几个重要的点
# 实体1 <关系> 实体2
# 课程
# <一对多>章节 <一对多>视频 <一对一>课程资源(所以这个直接加在课程表里面)
# 2. 实体的具体字段
# 3. 每个字段的类型,是否必填
class Course(BaseModel):
# add_time = models.DateTimeField(default=datetime.now, verbose_name='添加时间') # 不要使用datetime.now(
# )方法,若使用,则在调用的时候就已经设置好了,但我们希望在生成实例的时候才后填
# 应该之后的绝大部分都需要使用到这个add_time,所以我们采用django model的继承机制来继承这个实体
# 因为`BaseModel`会被其他层的model所引用,所以把他放到最下面的`user`层.然后在course中引入users.model的BaseModel
teacher = models.ForeignKey(Teacher, on_delete=models.CASCADE, verbose_name='讲师')
name = models.CharField(verbose_name='课程名', max_length=50)
desc = models.CharField(verbose_name='课程描述', max_length=300)
# 最好是以最小单位来保存时长,在显示的时候再将其转换为小时或分钟
learn_times = models.IntegerField(default=0, verbose_name='学习时长(分钟数)')
degree = models.CharField(verbose_name="难度", choices=(("cj", "初级"), ("zj", "中级"), ("gj", "高级")), max_length=2)
students = models.IntegerField(default=0, verbose_name='学习人数')
fav_nums = models.IntegerField(default=0, verbose_name='收藏人数')
click_nums = models.IntegerField(default=0, verbose_name="点击数")
notice = models.CharField(verbose_name="课程公告", max_length=300, default="")
category = models.CharField(default=u"后端开发", max_length=20, verbose_name="课程类别")
tag = models.CharField(default="", verbose_name="课程标签", max_length=10) # 用于相关课程的推荐
youneed_know = models.CharField(default="", max_length=300, verbose_name="课程须知")
teacher_tell = models.CharField(default="", max_length=300, verbose_name="老师告诉你")
is_classics = models.BooleanField(default=False, verbose_name="是否经典")
detail = models.TextField(verbose_name="课程详情", default="")
image = models.ImageField(upload_to="courses/%Y/%m", verbose_name="封面图", max_length=100)
class Meta:
verbose_name = '课程信息'
verbose_name_plural = verbose_name
def __str__(self):
return self.name
class Lesson(BaseModel):
course = models.ForeignKey(Course, on_delete=models.CASCADE) # on_delete表示对应的外键数据被删除后,当前的数据应该怎么办
name = models.CharField(max_length=100, verbose_name="章节名")
learn_times = models.IntegerField(default=0, verbose_name="学习时长(分钟数)")
class Meta:
verbose_name = '课程章节'
verbose_name_plural = verbose_name
def __str__(self):
return self.name
class Video(BaseModel):
lesson = models.ForeignKey(Lesson, verbose_name='章节', on_delete=models.CASCADE) # on_delete表示对应的外键数据被删除后,当前的数据应该怎么办
name = models.CharField(max_length=100, verbose_name="视频名")
learn_times = models.IntegerField(default=0, verbose_name="学习时长(分钟数)")
url = models.CharField(max_length=200, verbose_name='访问地址')
class Meta:
verbose_name = '视频'
verbose_name_plural = verbose_name
def __str__(self):
return self.name
class CourseResource(BaseModel):
course = models.ForeignKey(Course, on_delete=models.CASCADE, verbose_name="课程")
name = models.CharField(max_length=100, verbose_name="名称")
file = models.FileField(upload_to="course/resource/%Y/%m", verbose_name="下载地址", max_length=200)
class Meta:
verbose_name = "课程资源"
verbose_name_plural = verbose_name
def __str__(self):
return self.name
Organizations的注册
1.注册
import xadmin
from apps.organizations.models import Teacher, CourseOrg, City
# xadmin允许我们不继承任何东西
class TeacherAdmin(object):
list_display = ['org', 'name', 'work_years', 'work_company']
search_fields = ['org', 'name', 'work_years', 'work_company']
list_filter = ['org', 'name', 'work_years', 'work_company']
class CourseOrgAdmin(object):
list_display = ['name', 'desc', 'click_nums', 'fav_nums']
search_fields = ['name', 'desc', 'click_nums', 'fav_nums']
list_filter = ['name', 'desc', 'click_nums', 'fav_nums']
class CityAdmin(object):
list_display = ['id', 'name', 'desc']
search_fields = ['name', 'desc']
list_filter = ['name', 'desc', 'add_time']
list_editable = ['name', 'desc']
xadmin.site.register(Teacher, TeacherAdmin)
xadmin.site.register(CourseOrg, CourseOrgAdmin)
xadmin.site.register(City, CityAdmin)
Operations的注册
1.注册
import xadmin
from apps.operations.models import UserAsk, CourseComments, UserCourse, UserFavorite, UserMessage
class UserAskAdmin(object):
list_display = ['name', 'mobile', 'course_name', 'add_time']
search_fields = ['name', 'mobile', 'course_name']
list_filter = ['name', 'mobile', 'course_name', 'add_time']
class UserCourseAdmin(object):
list_display = ['user', 'course', 'add_time']
search_fields = ['user', 'course']
list_filter = ['user', 'course', 'add_time']
class UserMessageAdmin(object):
list_display = ['user', 'message', 'has_read', 'add_time']
search_fields = ['user', 'message', 'has_read']
list_filter = ['user', 'message', 'has_read', 'add_time']
class CourseCommentsAdmin(object):
list_display = ['user', 'course', 'comments', 'add_time']
search_fields = ['user', 'course', 'comments']
list_filter = ['user', 'course', 'comments', 'add_time']
class UserFavoriteAdmin(object):
list_display = ['user', 'fav_id', 'fav_type', 'add_time']
search_fields = ['user', 'fav_id', 'fav_type']
list_filter = ['user', 'fav_id', 'fav_type', 'add_time']
xadmin.site.register(UserAsk, UserAskAdmin)
xadmin.site.register(UserCourse, UserCourseAdmin)
xadmin.site.register(UserMessage, UserMessageAdmin)
xadmin.site.register(CourseComments, CourseCommentsAdmin)
xadmin.site.register(UserFavorite, UserFavoriteAdmin)
2.models里面str重写
from django.db import models
from django.contrib.auth import get_user_model
from apps.users.models import BaseModel
from apps.courses.models import Course
# 从settings里面直接获取user,不用导入我们自己定义的UserProfile(因为有的时候我们需要使用到django自带的user管理)
UserProfile = get_user_model()
class UserAsk(BaseModel):
name = models.CharField(max_length=20, verbose_name='姓名')
mobile = models.CharField(max_length=11, verbose_name='手机')
course_name = models.CharField(max_length=50, verbose_name='课程名')
class Meta:
verbose_name = '用户咨询'
verbose_name_plural = verbose_name
def __str__(self):
return '{name}_{course}({mobile})'.format(name=self.name, course=self.course_name, mobile=self.mobile)
class CourseComments(BaseModel):
user = models.ForeignKey(UserProfile, on_delete=models.CASCADE, verbose_name='用户')
course = models.ForeignKey(Course, on_delete=models.CASCADE, verbose_name='课程')
comments = models.CharField(max_length=200, verbose_name='评论内容')
class Meta:
verbose_name = '课程评论'
verbose_name_plural = verbose_name
def __str__(self):
return self.comments
class UserFavorite(BaseModel):
user = models.ForeignKey(UserProfile, on_delete=models.CASCADE, verbose_name='用户')
# 不使用以下两种方式,因为系统会变大,类型会变多,类也会越来越多,会导致太多的外键,还会需要造成修改表结构,新增一个类型就得新增一列
# course = models.ForeignKey(Course, verbose_name='课程')
# teacher = models.ForeignKey(Teacher, verbose_name='讲师')
fav_id = models.IntegerField(verbose_name='数据id')
fav_tag = models.IntegerField(choices=(('1', '课程'), ('2', '课程机构'), ('3', '讲师')), default=1, verbose_name='收藏类型')
class Meta:
verbose_name = '用户收藏'
verbose_name_plural = verbose_name
def __str__(self):
return '{user}_{id}'.format(user=self.user.username, id=self.fav_id)
class UserMessage(BaseModel):
user = models.ForeignKey(UserProfile, on_delete=models.CASCADE, verbose_name='用户')
message = models.CharField(max_length=200, verbose_name='内容')
has_read = models.BooleanField(default=False, verbose_name='是否已读')
class Meta:
verbose_name = '用户消息'
verbose_name_plural = verbose_name
def __str__(self):
return self.message
class UserCourse(BaseModel):
# 有两个外键 user 和 course
user = models.ForeignKey(UserProfile, on_delete=models.CASCADE, verbose_name='用户')
course = models.ForeignKey(Course, on_delete=models.CASCADE, verbose_name='课程')
class Meta:
verbose_name = '用户课程'
verbose_name_plural = verbose_name
def __str__(self):
return self.course.name
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。