Я хочу динамически построить значение с переменным количеством родителей 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 родительские категории. но у моих провидентов может быть несколько родителей. как я могу реализовать поиск для этого? Я предполагаю, что мне нужно динамически создавать код_сервиса для каждой записи, но как этого добиться?