在Django中监视用户活动

时间:2016-10-21 01:37:31

标签: python django

我正在创建一个图书应用,用户可以注册并开始阅读。

这是本书的model.py:

from django.db import models
from django.urls import reverse

from django.conf import settings


class Chapter(models.Model):
    title = models.CharField(max_length=200, unique=True)
    slug = models.SlugField(unique=True)
    date_completed = models.DateTimeField(blank=True, null=True)

    completed = models.BooleanField(default=False)

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse("course:subchapter_list", kwargs={"pk": self.pk})


class SubChapter(models.Model):
    chapter = models.ForeignKey(Chapter, on_delete=models.CASCADE)
    title = models.CharField(max_length=200, unique=True)
    slug = models.SlugField(unique=True)

    completed = models.BooleanField(default=False)

    def __str__(self):
        return self.title


class SubSection(models.Model):
    sub_chapter = models.ForeignKey(SubChapter, on_delete=models.CASCADE)
    title = models.CharField(max_length=200, unique=True)
    slug = models.SlugField(unique=True)
    text = models.TextField(null=True, blank=False)

    completed = models.BooleanField(default=False)

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse("course:detail",
                       kwargs={"slug": self.sub_chapter.slug,
                               "slug2": self.slug,
                               "pk": self.sub_chapter.chapter.pk,
                               }
                       )

如何监控每个用户的进度,以便在查看/阅读子部分/章节/章节时,该模型实例的已完成属性仅为该用户设置为True?我当前的实现设置已完成为每个人的True。

我希望知道如何实现它的代码片段。

1 个答案:

答案 0 :(得分:1)

如果您想监控每个用户的阅读进度,您无法在ChapterSubChapterSubSection型号上显示已完成的字段,则需要新的一个与用户相关的。我会做这样的事情:

class ReadingProgress(models.Model):
    user = models.ForeignKey(User)
    completed_chapter = models.ForeignKey(Chapter)
    completed_subchapter = models.ForeignKey(SubChapter)
    completed_subsection = models.ForeignKey(SubSection)

如果你有不同的书籍,你也应该为书籍模型添加外键。

然后在获取章节,章节等的视图中,您可以获取特定用户的ReadingProgress对象(并预订?)并设置相应的值。