2017-03-23 5 views
0

텍스트 필드가있는 모델이 있습니다. 이 필드에 사용할 수있는 객체를 가져 오기 위해 Django-Autocomplete가있는 양식이 추가되었습니다. 나는 때문에 그것을 얻을 것을 이해관리자가 ModelChoiceField에 텍스트 조회를 수행하면 오류가 발생합니다.

:이 모델의 관리자 페이지에서

는, 내가 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',) 
) 

답변

0

사용자 정의 get_search_results를 사용하여 search_fields을 변경하고 또한 다른 필드를 사용하는 데 필요한/목록이 결과

#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