0

我有一个像这样的自动完成的查找:

class PrerequisitesLookup(ModelLookup):
  """Prerequisites"""
  model=Material
  search_fields = ('prerequisites__istartswith',)

  def get_item_value(self, item):
    return item.prerequisites

      def get_item_label(self, item):
    return u"%s" % item.prerequisites

registry.register(PrerequisitesLookup)

现在,许多数据库条目只有先决条件“无”,我只希望它在我的自动完成列表中出现一次。我可以使用 django-selectable 实现这一点,如果可以,如何实现?

4

1 回答 1

1

如果您对选择实例不感兴趣Material并且只想选择与该prerequisites字段匹配的文本,那么您可以覆盖get_query https://django-selectable.readthedocs.org/en/version-0.7.0/lookups.html#lookup -api

class PrerequisitesLookup(ModelLookup):
  """Prerequisites"""
  model=Material
  search_fields = ('prerequisites__istartswith', )

  def get_query(self, request, term):
    qs = super(PrerequisitesLookup, self).get_query(request, term)
    return qs.values_list('prerequisites', flat=True).distinct()

  def get_item_id(self, item):
    return item

registry.register(PrerequisitesLookup)

请注意,item各种格式化方法(get_item_label, get_item_id, get_item_value)中的 将是prerequisites字符串而不是Material实例,这就是get_item_id必须覆盖默认值的原因。

于 2013-09-25T13:01:57.007 回答