操作表,即存储用户操作的表
首先,在operations/model/py中
from apps.users.models import BaseModel
评论:
可以这样写:
from apps.users.models import UserProfile
class CourseComment(BaseModel): # 课程评论
user = models.ForeignKey(UserProfile)
一般不这么使用,因为后期如果要修改成使用系统自带的USER表之类的,就要修改所有的UserProfile。
所以改为:
from django.contrib.auth import get_user_model
这个方法会根据setting中的AUTH_USER_MODEL来得到class。后期修改时只需要修改setting中的AUTH_USER_MODEL即可。
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
UserProfile = get_user_model()
class CourseComment(BaseModel): # 课程评论
user = models.ForeignKey(UserProfile, verbose_name='用户', on_delete=models.CASCADE)
course = models.ForeignKey(Course, verbose_name='课程', on_delete=models.CASCADE)
content = models.CharField(max_length=500, verbose_name='评论内容')
class Meta:
verbose_name = '课程评论'
verbose_name_plural = '课程评论'
用户收藏:
可以这样设计:
class UserFavorite(BaseModel):
course = models.ForeignKey(course, verbose_name='数据id')
teacher = models.ForeignKey(teacher, verbose_name='收藏类型')
但是这种方法引入外键过多,设计不合理。因此采用以下设计:
class UserFavorite(BaseModel): # 用户收藏
fav_id = models.IntegerField(verbose_name='数据id')
fav_type = models.IntegerField(choices=((1, '课程'), (2, '教师'),), default=1, verbose_name='收藏类型')
class Meta:
verbose_name = '用户收藏'
verbose_name_plural = '用户收藏'
通知
class UserMessage(BaseModel): # 通知
user = models.ForeignKey(UserProfile, verbose_name='用户', on_delete=models.CASCADE)
content = models.CharField(max_length=500, verbose_name='通知内容')
has_read = models.BooleanField(default=False, verbose_name='是否已读')
class Meta:
verbose_name = '通知'
verbose_name_plural = '通知'
用户学习的课程
class UserCourses(BaseModel): # 用户学习的课程
is_finished = models.BooleanField(default=False, verbose_name='是否完成')
user = models.ForeignKey(UserProfile, verbose_name='用户', on_delete=models.CASCADE)
course = models.ForeignKey(Course, verbose_name='课程', on_delete=models.CASCADE)
class Meta:
verbose_name = '我的课程'
verbose_name_plural = '我的课程'
注意:在引用外键的时候一定要设置on_delete
在数据库中生成表
使用makemigrations 和 migrate
其中出现了以下问题:
Lost connection to MySQL server at ‘reading initial communication packet
重启mysql服务后解决。
Cannot delete or update a parent row: a foreign key constraint fails
将整个zkonline数据库删除后,再创建一个zkonline解决。
migrate成功。