При поиске текста для 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

аналогичный вопрос

Другие вопросы по тегам