Выполнение поиска текста для 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', )
)

person Yarh    schedule 23.03.2017    source источник


Ответы (1)


Необходимо изменить search_fields с помощью пользовательского 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

похожий вопрос

person Yarh    schedule 23.03.2017