Как добавить дополнительные поля для канала в канал Django (в частности, канал Django-iCal)

Я создаю фид календаря для каждого пользователя. Как часть URL я разрешаю фильтры событий. Я изо всех сил пытаюсь понять, как сохранить этот фильтр (или любую произвольную переменную) в конкретную ленту, которую я генерирую из конкретного вызова. Метод, который, по моему мнению, будет работать, состоит в том, чтобы (исходя из мира C++) создать статическую переменную, которая совместно используется всеми вызывающими потоками, что приведет к несогласованности, когда потоки генерируются одновременно.

Каков правильный способ сделать это? Просматривая библиотеки каналов, я вижу такие методы, как feed_extra_kwargs() и item_extra_kwargs(), но не могу найти примеров или документации по ним, показывающих, как их использовать.

Мой URL:

      re_path(r'^ics/(?P<user_id>\d+)/(?P<params>[\w=;]+)/ical.ics$', EventFeed(), name='ics'),

Моя попытка фида:

      class EventFeed(ICalFeed):

"""
A simple event calender
"""
product_id = '-//icevite.com//Schedule//EN'
timezone = 'UTC'
file_name = "icevite.ics"

filter = []
alarms = []

def get_object(self, request, user_id, params, *args, **kwargs):
    self.filter = []
    try:
        split = params.split(";")
        for s in split:
            item = s.split("=")
            match item[0]:
                case "f":
                    self.filter = list(item[1])
                case "n":
                    mins = int(item[1])
                    if mins:
                        self.alarms.append(mins)
        return Player.objects.get(id=user_id)
    except:
        return None

def items(self, player):
    responses = Response.objects.filter(mate__player=player)
    if self.filter:
        filtered = responses.exclude(response__in=self.filter)
    else:
        filtered = responses
    return filtered.select_related('game', 'game__team').order_by('game__time')

 ...
def item_valarm(self, item):
    alarm_list = list()
    for alarm in self.alarms:
        valarm = Alarm()
        valarm.add('action', 'display')
        valarm.add('description', self.item_title(item))
        valarm.add('trigger', timedelta(minutes=alarm))
        alarm_list.append(valarm)
    return alarm_list 

Итак, в основном я пытаюсь каким-то образом передать значение «фильтр» и «сигналы тревоги» методам items() и item_*() и не могу понять, как получить разные независимые значения для каждого доступа к URL-адресу. . Моя интуиция говорит, что это те методы *_extra_kwargs(), но как их установить и как получить к ним доступ?

0 ответов

Другие вопросы по тегам