При поиске текста для ModelChoiceField в Admin появляется ошибка
У меня есть модель с текстовым полем. Я добавил форму с Django-Autocomplete, чтобы получить доступные объекты для этого поля.
На странице администратора для этой модели я хотел бы искать объекты, используя поле my_field, но я получаю ошибку "Связанное поле получило недопустимый поиск: icontains"
Я понимаю, что получил его, потому что поле формы теперь ModelChoiceField, как я могу исправить его для поиска по полю имени SomeOtherModel?
from dal import autocomplete
import django.forms as forms
from django.db import models
# models.py
class SomeModel(models.Model):
some_other_model = models.ForeignKey('SomeOtherModel', )
class SomeOtherModel(models.Model):
name = models.CharField(max_length=255)
#admin.py
class SomeModelAdmin(admin.ModelAdmin):
form = SomeModelForm
search_fields = ['some_other_model__name', ]
#form.py
class SomeModelForm(ModelForm):
some_other_model = forms.ModelChoiceField(
queryset=SomeOtherModel.objects.all(),
widget=autocomplete.ModelSelect2(url='control:someothermodel-autocomplete', )
)
1 ответ
Нужно изменить поля поиска с помощью пользовательского get_search_results, а также использовать другие поля / результаты списка
#admin.py
class SomeModelAdmin(admin.ModelAdmin):
form = SomeModelForm
search_fields = []
def get_search_results(self, request, queryset, search_term):
new_queryset, use_distinct = super(SomeModelAdmin, self).\
get_search_results(request, queryset, search_term)
new_queryset |=
queryset.filter(SomeOtherModel__name__icontains=search_term)
return new_queryset, use_distinct