Wagtail 按当前用户过滤外键
Wagtail Filter ForeignKey By Current User
我正在尝试为 Wagtail 中的教育培训应用构建进度跟踪器。我使用 PageModel 来表示“课程”:
# courses/models.py
class SectionLessonPage(Page):
lesson_video = models.ForeignKey('wagtailvideos.Video',
related_name='+',
null=True,
on_delete=models.SET_NULL)
content_panels = Page.content_panels + [
VideoChooserPanel('lesson_video'),
]
def serve(self, request):
if request.user.is_authenticated:
lesson_viewed_signal.send(self.__class__, instance=self, request=request)
return super().serve(request)
我有一个单独的 'progress' 应用程序,它从服务功能接收信号以记录特定用户的页面访问。
# progress/models.py
class UserLessonView(models.Model):
lesson = models.ForeignKey(
'courses.SectionLessonPage',
null=True,
blank=True,
on_delete=models.CASCADE,
related_name="views"
)
user = models.ForeignKey(User, on_delete=models.CASCADE)
viewed_on = models.DateTimeField(auto_now_add=True)
这在两个模型之间建立了一对多的关系。但是,当我在模板中尝试为登录用户获取 SectionLessonPage 的 'views' 时,未考虑当前登录用户。
由于当前用户不是SectionLessonPage的字段,所以没有模型关系可以使用。相反,这可能需要在 SectionLessonPage 的 get_context() 或 serve() 方法中处理。
问题是当我在 SectionLessPage 模板上调用 {{ self.views }} 时,它 return 是所有用户的所有视图。
我需要它 return 仅针对当前用户的视图。如何传递此页面的视图,为当前用户过滤?
self.views.filter(user=request.user)
会做的。您不能在模板本身内调用 filter
(因为 Django 模板语言不提供将参数传递给函数的方法),但您可以这样做 within the page's get_context
method 以使该结果可用作模板中的变量:
class SectionLessonPage(Page):
# ...
def get_context(self, request):
context = super().get_context(request)
context['user_views'] = self.views.filter(user=request.user)
return context
此结果将作为 {{ user_views }}
.
在模板中提供
我正在尝试为 Wagtail 中的教育培训应用构建进度跟踪器。我使用 PageModel 来表示“课程”:
# courses/models.py
class SectionLessonPage(Page):
lesson_video = models.ForeignKey('wagtailvideos.Video',
related_name='+',
null=True,
on_delete=models.SET_NULL)
content_panels = Page.content_panels + [
VideoChooserPanel('lesson_video'),
]
def serve(self, request):
if request.user.is_authenticated:
lesson_viewed_signal.send(self.__class__, instance=self, request=request)
return super().serve(request)
我有一个单独的 'progress' 应用程序,它从服务功能接收信号以记录特定用户的页面访问。
# progress/models.py
class UserLessonView(models.Model):
lesson = models.ForeignKey(
'courses.SectionLessonPage',
null=True,
blank=True,
on_delete=models.CASCADE,
related_name="views"
)
user = models.ForeignKey(User, on_delete=models.CASCADE)
viewed_on = models.DateTimeField(auto_now_add=True)
这在两个模型之间建立了一对多的关系。但是,当我在模板中尝试为登录用户获取 SectionLessonPage 的 'views' 时,未考虑当前登录用户。
由于当前用户不是SectionLessonPage的字段,所以没有模型关系可以使用。相反,这可能需要在 SectionLessonPage 的 get_context() 或 serve() 方法中处理。
问题是当我在 SectionLessPage 模板上调用 {{ self.views }} 时,它 return 是所有用户的所有视图。 我需要它 return 仅针对当前用户的视图。如何传递此页面的视图,为当前用户过滤?
self.views.filter(user=request.user)
会做的。您不能在模板本身内调用 filter
(因为 Django 模板语言不提供将参数传递给函数的方法),但您可以这样做 within the page's get_context
method 以使该结果可用作模板中的变量:
class SectionLessonPage(Page):
# ...
def get_context(self, request):
context = super().get_context(request)
context['user_views'] = self.views.filter(user=request.user)
return context
此结果将作为 {{ user_views }}
.