django Autocomplete-light, как выбрать конкретный метод из режима
Я новичок в Django и автозаполнение света. Я пытаюсь получить разные поля модели из autocomplete-light, но она всегда возвращает одно и то же поле. И причина в том, что в модели определено одно поле. Поэтому я создал еще один def, но не могу заставить autocomplete-light вызвать этот конкретный def. Вот мой код
models.py:
class Item(models.Model):
...
serial_number=models.CharField(max_length=100, unique=True)
barcode=models.CharField(max_length=25, unique=True)
def __unicode__(self):
return self.serial_number
def bar(self):
return self.barcode
.......
autocomplete_light_registry.py
autocomplete_light.register(Item,
name='AutocompleteItemserial',
search_fields=['serial_number'],
)
autocomplete_light.register(Item,
name='AutocompleteItembarcode',
search_fields=['barcode'],
)
Вот в чем проблема: когда я пытаюсь получить штрих-коды от автозаполнения, он возвращает серийные номера. Независимо от того, что я пытаюсь получить от модели Item, он всегда возвращает серийный номер. Я действительно ценю за ответы. Спасибо. На всякий случай вот form.py
forms.py
class ItemForm(forms.ModelForm):
widgets = {
'serial_number': autocomplete_light.TextWidget('AutocompleteItemserial'),
'barcode': autocomplete_light.TextWidget('AutocompleteItembarcode'),
}
1 ответ
Хотя это старый пост, но так как я столкнулся с той же проблемой, я делюсь своим решением.
Причина автозаполнения возвращается serial_number
потому что django-autocomplete-light использует метод __unicode__ модели для отображения результатов. В вашем AutocompleteItembarcode
все, что делается, это автозаполнение-свет ищет barcode
поле Item
,
Попробуйте следующее.
In app/autocomplete_light_registry.py
from django.utils.encoding import force_text
class ItemAutocomplete(autocomplete_light.AutocompleteModelBase):
search_fields = ['serial_number']
model = Item
choices = Item.objects.all()
def choice_label(self, choice):
"""
Return the human-readable representation of a choice.
"""
barcode = Item.objects.get(pk=self.choice_value(choice)).barcode
return force_text(barcode)
autocomplete_light.register(ItemAutocomplete)
Для получения дополнительной помощи вы можете взглянуть на исходный код.