django - 将 Wagtail 自定义站点设置限制为组或站点

标签 django wagtail

我正在尝试为每个站点创建自定义设置以获取页眉/页脚信息。我已注册设置,并且可以编辑每个网站的设置,但其他网站可以查看/编辑这些设置:

enter image description here

我的代码是:

@register_setting
class SiteSettings(BaseSetting, ClusterableModel):
    site_name = models.CharField(max_length=50)
    site_logo = models.ForeignKey(
        'wagtailimages.Image',
        null=True,
        blank=True,
        on_delete=models.SET_NULL,
        related_name='+',
    )
    banner_color = models.CharField(
        max_length=6,
        null=True,
        blank=True,
        help_text="Fill in a hex colour value"
    )
    include_footer = models.BooleanField(null=True)

    panels = [
        FieldPanel('site_name'),
        ImageChooserPanel('site_logo'),
        FieldPanel('banner_color'),
        FieldPanel('include_footer'),
        InlinePanel('footer', label="Footer",
                help_text='Select your contact/social media type and enter the phone number, email, or URL')
    ]

我尝试重写 SiteSwitchForm,但它似乎没有被调用。

# Override SiteSwitchForm

class SiteSwitchForm(SingleSiteSwitchForm):
    site = forms.ChoiceField(choices=[])

    class Media:
        js = [
            'wagtailmenus/js/site-switcher.js',
        ]

    def __init__(self, current_site, url_helper, **kwargs):
        initial = {'site': url_helper.get_action_url('edit', current_site.pk)}
        super().__init__(initial=initial, **kwargs)
        sites = []
        for site in Site.objects.filter(site_name__exact=self.site_name):
            sites.append((url_helper.get_action_url('edit', site.pk), site))
        self.fields['site'].choices = sites

我也尝试过:

def get_queryset(self, request):
    qs = super().get_queryset(request)
    return qs.filter(managed_by=request.user)

但这不适用于 BaseSettings。

有没有办法使自定义设置仅对拥有该网站的组/网站可见?

最佳答案

将 SiteSettings 注册为 ModelAdmin 并覆盖 ModelAdmin.get_queryset收到请求。这样您就可以查找当前站点。

现在您只需要一种在设置菜单中禁用 SiteSettings 的方法。

关于django - 将 Wagtail 自定义站点设置限制为组或站点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53915904/

相关文章:

django - 如何在任务功能运行之前设置 celery 结果后端键?

wagtail - Wagtail 富文本内容中的片段 ID 链接

django - 在 Wagtail 中测试相关页面

python - Wagtail 将 sqlite 移动到 postgres 数据库

django - 我将如何在 Django 中执行此查询?

python - Django 从社交账户邀请好友

python - django 运行 unittest 失败,而我的一个名为 "apps"的应用程序,但 "runserver"有效

python - 在 Django 中使用 RSS (/Python)

Django Treebread admin AttributeError - 'Page' 对象没有属性 'page_ptr_id'

python - Wagtail 根据登录用户的权限过滤页面子元素