1

我是 django 和 autocomplete-light 的新手。我尝试从 autocomplete-light 获取模型的不同字段,但它总是返回相同的字段。原因是Model中的def定义了一个字段。所以我创建了另一个 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'],
)

这是问题所在:当我尝试从自动完成灯中获取条形码时,它返回 serial_numbers。无论我尝试从 Item 模型中得到什么,它总是返回序列号。我真的很感谢你的答案。谢谢你。以防万一,这里是 form.py

forms.py

class ItemForm(forms.ModelForm):
widgets = {
    'serial_number': autocomplete_light.TextWidget('AutocompleteItemserial'),
    'barcode': autocomplete_light.TextWidget('AutocompleteItembarcode'),
}
4

1 回答 1

1

虽然这是一篇旧帖子,但由于我刚刚遇到同样的问题,因此我分享了我的解决方案。

自动完成返回的原因serial_number是 django-autocomplete-light 使用模型的 __unicode__ 方法来显示结果。在您所做的AutocompleteItembarcode所有事情中,autocomplete-light 正在按.barcodeItem

试试下面的。

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)

如需更多帮助,您可以查看源代码

于 2015-06-05T07:50:30.967 回答