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)

Для получения дополнительной помощи вы можете взглянуть на исходный код.

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