Я хочу динамически построить значение с переменным количеством родителей python django

Я работаю над проектом django. У меня есть модель Providable и внешний ключ: категория (providable_categtory). каждая категория может иметь несколько подкатегорий, и в конечном итоге providable будет назначен узлу листа. вот как создается код категории для каждого providable:

@property
def get_code(self):
    return f"{self.category.get_code}-{self.code}"

метод get_code в providable_category:

@property
def get_code(self):
    if not self.parent:
        return self.code
    else:
        return f"{self.parent.get_code}-{self.code or self.pk_code}"

Как вы можете видеть, когда я отображаю код провидента в админке django, это выглядит примерно так: a-b-c-6 где a,b и c - это категории, а 6 - собственный код провидицы.

Итак, теперь я хочу иметь возможность искать провизор в админке django, используя его полный код, но так как полный код провизора не является полем провизора, это нельзя сделать напрямую, добавив метод get_code в поле поиска.

Я реализовал переопределение метода get-search_results в своем классе ProvidableAdmin следующим образом:

def get_search_results(self, request, queryset, search_term):
    # annotation for the service_code.
    queryset = queryset.annotate(
        service_code=Concat(
            "category__parent__parent__code",
            Value("-"),
            "category__parent__code",
            Value("-"),
            "category__code",
            Value("-"),
            "code"
        )
    )
    queryset, may_have_duplicates = super().get_search_results(request, queryset, search_term)
    return queryset, may_have_duplicates

и добавили service_code в search_fields.

Это работает хорошо, пока у провидентов есть 3 родительские категории. но у моих провидентов может быть несколько родителей. как я могу реализовать поиск для этого? Я предполагаю, что мне нужно динамически создавать код_сервиса для каждой записи, но как этого добиться?

Вернуться на верх