Wagatail 2.1 (Django) Пользовательские настройки доступа из сниппета - PullRequest
0 голосов
/ 28 августа 2018

Итак, у меня есть некоторые настройки, которые мне нужно настроить через интерфейс.

@register_setting
class TierPricingSettings(BaseSetting):
    Monday = models.CharField(max_length=255)
    Tuesday = models.CharField(max_length=255)
    Wednesday = models.CharField(max_length=255)
    Thursday = models.CharField(max_length=255)
    Friday = models.CharField(max_length=255)
    Saturday = models.CharField(max_length=255)
    Sunday = models.CharField(max_length=255)


content_panels_english = [
    FieldPanel('Monday'),
    FieldPanel('Tuesday'),
    FieldPanel('Wednesday'),
    FieldPanel('Thursday'),
    FieldPanel('Friday'),
    FieldPanel('Saturday'),
    FieldPanel('Sunday'),
]

Однако я не могу получить доступ к этим значениям из фрагмента? Это связано с тем, что документация гласит, что вы можете получить к ней доступ только через python

 my_settings = TierPricingSettings.for_site(request.site)

Однако фрагменты не имеют доступа к объекту запроса. Как мне добиться того, чтобы настройки настраивались из админ-панели и чтобы эти значения были доступны во фрагментах.

1 Ответ

0 голосов
/ 29 августа 2018

Модуль wagtail.contrib.settings работает на основе того, что каждый сайт в вашей установке Wagtail имеет свой собственный набор настроек. У фрагментов нет встроенного понятия принадлежности к определенному сайту (и, в более общем случае, код модели должен работать независимо от текущего запроса), поэтому здесь нам нужен какой-то другой способ определения настроек сайта для поиска.

Если вы работаете только с одним сайтом в этом экземпляре Wagtail и не собираетесь больше добавлять его, вы можете использовать следующее, чтобы сообщить ему, что нужно выбрать настройки с одного и того же сайта:

from wagtail.core.models import Site

my_settings = TierPricingSettings.for_site(Site.objects.first())

Если у вас есть несколько сайтов (или вы можете сделать это в будущем), но вы хотите, чтобы глобальный объект TierPricingSettings применялся повсеместно, лучше всего выбрать один из ваших сайтов в качестве «сайта по умолчанию» в разделе «Настройки» -> Сайты, и убедитесь, что вы выбрали этот сайт при заполнении TierPricingSettings в админке. Затем найдите соответствующий сайт следующим образом:

from wagtail.core.models import Site

my_settings = TierPricingSettings.for_site(Site.objects.get(is_default_site=True))

Если вы хотите, чтобы настройки менялись в зависимости от текущего активного сайта, вам нужно либо обновить модель своего сниппета, чтобы иметь явную концепцию принадлежности к сайту (например, добавить внешний ключ к Site), или выполните все расчеты цены в методе, который получает объект сайта в качестве аргумента.

...