我正在创建一个书籍应用程序,用户可以在其中注册并开始阅读.
这是本书的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.
我希望代码片段能够展示如何实现它.
最佳答案 如果要监视每个用户的阅读进度,则无法在Chapter,SubChapter和SubSection模型上获得完整的字段,您需要一个与用户相关的新字段.我会做这样的事情:
class ReadingProgress(models.Model):
user = models.ForeignKey(User)
completed_chapter = models.ForeignKey(Chapter)
completed_subchapter = models.ForeignKey(SubChapter)
completed_subsection = models.ForeignKey(SubSection)
如果您有不同的书籍,则还应将外键添加到书籍模型中.
然后在获取章节,章节等的视图中,您可以获取特定用户的ReadingProgress对象(并预订?)并设置相应的值.