Ограничить пользовательские настройки сайта Wagtail группой или сайтом - PullRequest
0 голосов
/ 24 декабря 2018

Я пытаюсь создать пользовательские настройки для каждого отдельного сайта для информации о верхних и нижних колонтитулах.Я зарегистрировал настройки и могу редактировать настройки для каждого сайта, но другие сайты могут просматривать / редактировать эти настройки:

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.

Есть ли способ сделать пользовательские настройки видимыми только для группы / сайта, которому принадлежит сайт?

1 Ответ

0 голосов
/ 25 декабря 2018

Зарегистрируйте SiteSettings как ModelAdmin и переопределите ModelAdmin.get_queryset получает запрос.Таким образом, вы можете искать текущий сайт.

Теперь вам нужен только способ отключения SiteSettings в меню настроек.

...