django项目中相关推荐的用法

1.  课程模型类和课程标签模型类

class Course(BaseModel):
    teacher = models.ForeignKey(Teacher, on_delete=models.CASCADE, verbose_name="讲师")
    course_org = models.ForeignKey(CourseOrg, null=True, blank=True, on_delete=models.CASCADE, verbose_name="课程机构")
    name = models.CharField(max_length=50, verbose_name="课程名")
    desc = models.CharField(max_length=300, verbose_name="课程描述")
    learn_times = models.IntegerField(verbose_name="学习时长(分钟数)", default=0)
    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="点击数")
    category = models.CharField(default=u"后端开发", max_length=20, verbose_name="课程类别")
    youneed_know = models.CharField(default="", max_length=300, verbose_name="课程须知")
    teacher_tell = models.CharField(default="", max_length=300, verbose_name="老师告诉你")

    detail = models.TextField(verbose_name="课程详情")
    image = models.ImageField(upload_to="courses/%Y/%m", verbose_name="封面图", max_length=100)

    is_classic = models.BooleanField(default=False, verbose_name="是否经典")

    class Meta:
        verbose_name = "课程信息"
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.name

    def lesson_nums(self):
        """课程章节数"""
        return self.lesson_set.count()


class CourseTag(BaseModel):
    """课程标签表"""
    course = models.ForeignKey(to=Course, on_delete=models.CASCADE, verbose_name="课程")
    tag = models.CharField(max_length=50, verbose_name="课程标签")

    class Meta:
        verbose_name = "课程标签"
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.tag

2. 视图中的查询逻辑

class CourseDetailView(View):
    def get(self, request, course_id):
        """课程详情页展示"""
        course = Course.objects.get(id=int(course_id))
        course.click_nums += 1
        course.save()
        # 查询课程所对应的机构
        org = course.course_org

        # 获取机构的收藏状态
        is_org_collection = False
        if request.user.is_authenticated:
            if UserFavorite.objects.filter(user=request.user, fav_id=org.id, fav_type=2):
                # 如果查到了,表示已收藏
                is_org_collection = True

        # 获取课程的收藏状态
        is_course_collection = False
        if request.user.is_authenticated:
            if UserFavorite.objects.filter(user=request.user, fav_id=course.id, fav_type=1):
                # 如果查到了,表示已收藏
                is_course_collection = True


        # 相关课程的推荐
        tags = course.coursetag_set.all()
        tag_list = [tag.tag for tag in tags]
        course_tags = CourseTag.objects.filter(tag__in=tag_list).exclude(course=course)
        related_course = set()
        for course_tag in course_tags:
            related_course.add(course_tag.course)


        return render(request, "course-detail.html",
                      {"course": course, "org": org,
                       "is_org_collection": is_org_collection,
                       "is_course_collection": is_course_collection,
                       "related_course": related_course})

猜你喜欢

转载自blog.csdn.net/weixin_42289273/article/details/114756926