我有一些群组和收藏集设置,以便利用收藏夹功能。
我只限集合到管理员。
以非管理员身份登录并点击“选择图像”后,按钮调出图像选择器,收集'收集'它包括我的所有馆藏,包括受限制的集合。
是否可以仅显示用户拥有的集合和图像,类似于'图像'菜单项有效吗?
W :: 1.12.2 Django:1.8.18
答案 0 :(得分:1)
我知道问这个问题已经有一段时间了,但是希望这个答案对某些人有帮助。
Wagtail 1.10(在本文中,2.10正在开发中)引入了一个有用的钩子,称为construct_image_chooser_queryset
。该挂钩将截取图像,然后将其返回给图像选择器模式(在Wagtail管理员中使用),并使开发人员可以自定义返回的图像。
该钩子也可以访问该请求,从那里您可以计算出用户并相应地建立图像查询。
问题的另一部分涉及collections下拉字段,这需要一些Django模板工作,但是可以实现,而没有太多额外的复杂性。任何具有自定义模板的Wagtail admin template can be overridden,只需使用现有模板路径对其进行命名即可。
发布时用于渲染集合下拉列表的Django共享模板(包括)为wagtail/admin/templates/wagtailadmin/shared/collection_chooser.html
注意:由于问题没有更改收集模型,因此代码不是完整的解决方案,但希望它将是一个很好的开始。
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
{% extends images|yesno:"base/include/images_collection_chooser.html,wagtailadmin/shared/collection_chooser.html" %}
{% 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 %}
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