2017-03-23 7 views
0

J'ai un modèle qui a un champ de texte J'ai ajouté un formulaire avec Django-Autocomplete pour obtenir les objets disponibles pour ce champ.Recherche de texte pour un ModelChoiceField sur Admin obtient une erreur

Dans la page d'administration pour ce modèle, je voudrais rechercher des objets, en utilisant le champ my_field mais je reçois une erreur « domaine connexe a recherche invalide: icontains »

Je comprends que je reçois parce que Le champ du formulaire est maintenant ModelChoiceField, comment puis-je le réparer pour effectuer une recherche basée sur le champ de nom de 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',) 
) 

Répondre

0

nécessaires pour changer les search_fields en utilisant un get_search_results personnalisés et également utiliser les autres champs/Liste des résultats

#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 

similar question