Я не эксперт по django, поэтому я не уверен, что просто ищу не ту вещь, но я пытаюсь использовать django -autocomplete-light для автозаполнения некоторых полей в форме модели.
У меня есть модель, Животное. Животное имеет несколько полей. Моя цель - создать форму модели с автозаполнением для нескольких из этих полей.
forms.py
class AnimalForm(ModelForm):
class Meta:
model = Animal
fields = [
'myfield'
]
widgets = {
'myfield': autocomplete.ListSelect2(
url='myfield-autocomplete')
}
views.py:
class MyfieldAutocomplete(autocomplete.Select2QuerySetView):
def get_queryset(self):
# Don't forget to filter out results depending on the visitor !
if not self.request.user.is_authenticated:
return Animal.objects.none()
qs = Animal.objects.filter().values('myfield')
if self.q:
qs = qs.filter(name__istartswith=self.q)
return qs
Я получаю:
AttributeError: 'dict' object has no attribute 'pk'
Я думаю, потому что Animal.objects.filter (). Values ('myfield') возвращает фактические значения, а не набор запросов.
Если я изменю свой набор запросов на:
class MyfieldAutocomplete(autocomplete.Select2QuerySetView):
def get_queryset(self):
# Don't forget to filter out results depending on the visitor !
if not self.request.user.is_authenticated:
return Animal.objects.none()
qs = Animal.objects.all()
if self.q:
qs = qs.filter(name__istartswith=self.q)
return qs
Это загружает, и мое поле автозаполнения заполняется полем имени объектов Animal. Вместо имени я хочу иметь возможность указать произвольное поле.
update- ошибка вывода:
[28/Jan/2020 08:02:33] "GET /animals/add HTTP/1.1" 200 47686
C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\views\generic\list.py:88: UnorderedObjectListWarning: Pagination may yield inconsistent results with an unordered object_list: <class 'animals.models.Animal'> QuerySet.
allow_empty_first_page=allow_empty_first_page, **kwargs)
Internal Server Error: /operator-autocomplete/
Traceback (most recent call last):
File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\views\generic\base.py", line 71, in view
return self.dispatch(request, *args, **kwargs)
File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\dal\views.py", line 50, in dispatch
return super(ViewMixin, self).dispatch(request, *args, **kwargs)
File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\views\generic\base.py", line 97, in dispatch
return handler(request, *args, **kwargs)
File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\views\generic\list.py", line 158, in get
return self.render_to_response(context)
File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\dal_select2\views.py", line 61, in render_to_response
'results': self.get_results(context) + create_option,
File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\dal_select2\views.py", line 26, in get_results
} for result in context['object_list']
File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\dal_select2\views.py", line 26, in <listcomp>
} for result in context['object_list']
File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\dal\views.py", line 81, in get_result_value
return str(result.pk)
AttributeError: 'dict' object has no attribute 'pk'