Как применить фильтр автозаполнения Django через два связанных объекта?

Как можно настроить автокомплит фильтр для поля `Workspace.title` при отображении модели Chat в админке с использованием AutocompleteFilter?
  • 6 мая 2024 г. 12:40
Ответы на вопрос 2
Для применения фильтра автозаполнения Django через два связанных объекта можно использовать `ChainFieldListFilter` из пакета `django-admin-list-filter-dropdown`. 

Пример:
```python
from django.contrib import admin
from django_admin_listfilter_dropdown.filters import ChainFieldListFilter

from .models import Chat

class ChatAdmin(admin.ModelAdmin):
    list_filter = (
        ('workspace__organization', ChainFieldListFilter),
        ('workspace', ChainFieldListFilter),
    )
```

Для настройки автокомплит фильтра для поля `Workspace.title` при отображении модели Chat в админке с использованием AutocompleteFilter, можно использовать библиотеку `django-admin-autocomplete`:

Пример:
```python
from django.contrib import admin
from django_admin_autocomplete.admin import AutocompleteModelAdmin
from .models import Chat, Workspace

class ChatAdmin(AutocompleteModelAdmin):
    autocomplete_fields = ['workspace']

admin.site.register(Chat, ChatAdmin)
```

При этом необходимо убедиться, что поля `workspace` и `organization` являются ForeignKey в модели Chat, указывающими на соответствующие модели Workspace и Organization.
на SO мне подсказали решение - использовать не AutocompleteFilter а AutocompleteFilterFactory 

WorkplaceFilter = AutocompleteFilterFactory(
    'Workspace', 'user__workspace'
)

@admin.register(Chat)
class ChatAdmin(models.ModelAdmin):
    list_filter = [WorkplaceFilter]
Похожие вопросы