Django实战2——操作表的设计

操作表,即存储用户操作的表

首先,在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成功。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值