У меня есть ModelAdmin
в Django 2.1.3, например:
class BoxAdmin(admin.ModelAdmin):
autocomplete_fields = ['testkit']
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == 'testkit':
kwargs['queryset'] = Barcode.objects.exclude(testkit__in=Box.objects.all().values('testkit'))
return super().formfield_for_foreignkey(db_field, request, **kwargs)
метод formfield_for_foreignkey
написан для "традиционных" полей внешнего ключа.Для поля автозаполнения он обеспечивает отображение ошибки при выборе тест-набора вне набора запросов.Однако это не ограничивает результаты, найденные в поле автозаполнения.Документация не содержит никаких ограничений для пользовательских наборов запросов. Этот ответ связан, но касается только авторизации.
Возможно переопределить get_search_result
метод связанного ModelAdmin
.
class TestkitAdmin(admin.ModelAdmin):
search_fields = ['number']
def get_search_results(self, request, queryset, search_term):
queryset, use_distinct = super().get_search_results(request, queryset, search_term)
if 'autocomplete' in request.path:
queryset = queryset.exclude(testkit__in=Box.objects.all().values('testkit'))
return queryset, use_distinct
Но я не нашел способа определить, из какого поля автозаполнения пришел поисковый запрос.Таким образом, я могу запрограммировать его только для удовлетворения потребностей одной ссылки ModelAdmin
.
Как правильно ограничить набор запросов поля автозаполнения?