gpt4 book ai didi

django - 我可以限制 Wagtail 管理图像选择器中的可见集合吗?

转载 作者:行者123 更新时间:2023-12-04 17:49:19 26 4
gpt4 key购买 nike

我有一些组和集合设置以利用 wagtail 中的集合功能。

我将集合 A 限制为仅限管理员

以非管理员身份登录并单击“选择图像”按钮调出图像选择器后,会出现“收藏”下拉菜单,其中包括我的所有收藏,包括受限制的 收藏A.

是否可以仅显示用户拥有的收藏和图像,类似于“图像”菜单项的工作方式?

鹡鸰:1.12.2 Django :1.8.18

最佳答案

我知道自问这个问题以来已经有一段时间了,但希望这个答案对某些人有所帮助。

解决方案概述

Wagtail 1.10(在这篇文章中,2.10 正在开发中)引入了一个有用的钩子(Hook),称为 construct_image_chooser_queryset .该 Hook 将在图像返回到图像选择器模式(在所有 Wagtail 管理中使用)之前拦截图像,并允许开发人员自定义返回的图像。

Hook 还可以访问请求,从那里您可以确定用户并相应地构建图像查询。

您问题的另一部分涉及集合下拉字段,这需要一些 Django 模板工作,但无需太多额外的复杂性即可实现。任何Wagtail admin template can be overridden使用自定义模板,只需使用现有模板路径命名即可。

发布时用于呈现集合下拉列表的 Django 共享模板(包含)是 wagtail/admin/templates/wagtailadmin/shared/collection_chooser.html

示例代码

注意:该代码不是完整的解决方案,因为该问题没有更改集合模型,但有望成为一个良好的开端。

1。 Wagtail 图像选择器查询集 Hook

from wagtail.core import hooks


@hooks.register('construct_image_chooser_queryset')
def show_my_uploaded_images_only(images, request):
# Example: Only show uploaded images based on current user
# actual filtering will need to be based on the collection's linked user group
images = images.filter(uploaded_by_user=request.user)

return images

2。集合选择器模板覆盖

  • 2a 文件:../templates/wagtailadmin/shared/collection_chooser.html
  • 我们想重写模板并将其重定向到自定义模板,前提是图像存在于模板的上下文中
{% extends images|yesno:"base/include/images_collection_chooser.html,wagtailadmin/shared/collection_chooser.html" %}
  • 2b 文件:../templates/base/include/images_collection_chooser.html
  • 只有在上下文中有图像时才会使用此模板
  • 在这里,我们修改上下文以删除图像和过滤集合,然后呈现原始的 Wagtail 管理模板
{% load filter_with_permissions %}

{% with images=None %}
{% with collections=collections|filter_with_permissions:user %}
Images Only Collection Template:
{% include "wagtailadmin/shared/collection_chooser.html" %}
{% endwith %}
{% endwith %}
  • 2c文件:bakerydemo/base/templatetags/filter_with_permissions.py
  • 这里我们制作 Django template tag进行集合过滤
from django import template

register = template.Library()


@register.filter(name='filter_with_permissions')
def filter_with_permissions(collections, user):
""" filter the collections based on current user """
return collections.filter(name__startswith='B') # actual filter to be done

关于django - 我可以限制 Wagtail 管理图像选择器中的可见集合吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46397440/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com