Вопрос:
Как добавить возможность поиска элементов в моем настраиваемом столбце Текст справки?
Просмотр FooAdmin
Код:
Вот упрощенная версия кода, с которым я работаю:
models.py (да, именно так должны быть настроены модели)
class HelpText(models.Model):
help_text = models.CharField(max_length=1000)
def __str__(self):
return self.help_text
class Foo(models.Model):
job_name = models.CharField(max_length=200, blank=False, null=False)
env = models.CharField(max_length=200, blank=False, null=False)
def __str__(self):
return self.job_name
class FooHelpText(models.Model):
foo = models.OneToOneField(Foo, on_delete=models.DO_NOTHING)
help_text = models.ForeignKey(HelpText, on_delete=models.DO_NOTHING)
def __str__(self):
return str(self.help_text)
admin. py
class FooHelpTextInline(admin.TabularInline):
model = models.FooHelpText
@admin.register(models.Foo)
class FooAdmin(admin.ModelAdmin):
search_fields = ['env', 'job_name',]
list_display = ['pk', 'job_name', 'env', '_get_help_text', ]
inlines = [FooHelpTextInline]
def _get_help_text(self, obj):
return obj.foohelptext.help_text
Текущее поведение:
Текущий код выше позволяет мне видеть связанный help_text в столбце на FooAdmin. Однако я ничего не могу найти в этом столбце.
Не тот ответ, который я ищу:
Я знаю, если бы это был обратный путь, когда help_text был ForeignKey на Foo, я мог бы сделать что-то вроде foo__help_text
, но это не то, как мои моделинастроены (и не могут измениться).
Желаемое поведение:
Используйте поле поиска для поиска текста справки (не только env и job_name).
Возможное решение (с которым мне нужна помощь):
Я подозреваю, что get_search_results может быть тем, что мне нужно, но я не понимаю, как реализовать его для моего варианта использования.
ОБНОВЛЕНИЕ:
Самое близкое, что я могу получить, - это поиск числа (известного мне определенного ПК) и получение этого результата поиска. Но запрос на самом деле не имеет смысла. И очевидно, что это не желаемая функциональность поиска.
def get_search_results(self, request, queryset, search_term):
queryset, use_distinct = super().get_search_results(request, queryset, search_term)
try:
search_term_as_int = int(search_term)
except ValueError:
pass
else:
queryset |= models.Foo.objects.select_related(
'foohelptext').filter(fooshelptext=search_term_as_int)
return queryset, use_distinct
Я просто не понимаю Python | = (побитовый оператор ИЛИ) и почему он должен быть целым числом.