我正在尝试为每个站点创建自定义设置以获取页眉/页脚信息。我已注册设置,并且可以编辑每个网站的设置,但其他网站可以查看/编辑这些设置:
我的代码是:
@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/