GeoDjango:使用搜索功能扩展 GeoManager
GeoDjango: Extending GeoManager with Search Functionality
我正在学习使用 GeoDjango,据我了解,需要 GeoManager() 才能与 GIS 对象进行交互。
但是,我试图为我的模型构建一些搜索功能。我发现这个 old post 展示了如何使用 q 对象构建一个漂亮的小搜索管理器,如下所示:
class NewsPostManager(models.Manager):
def search(self, search_terms):
terms = [term.strip() for term in search_terms.split()]
q_objects = []
for term in terms:
q_objects.append(Q(title__icontains=term))
q_objects.append(Q(content__icontains=term))
# Start with a bare QuerySet
qs = self.get_query_set()
# Use operator's or_ to string together all of your Q objects.
return qs.filter(reduce(operator.or_, q_objects))
据我了解,这不适用于 GIS 对象,因为它不会调用 models.GeoManager()。有没有办法用这个附加功能扩展 models.GeoManager?
您可以添加 extra manager methods. In the case of geodjango you have to override the default manager (objects) with a GeoManager。
您需要覆盖 models.GeoManager 而不是 models.Manager 才能在这种情况下拥有自定义管理器。
我正在学习使用 GeoDjango,据我了解,需要 GeoManager() 才能与 GIS 对象进行交互。
但是,我试图为我的模型构建一些搜索功能。我发现这个 old post 展示了如何使用 q 对象构建一个漂亮的小搜索管理器,如下所示:
class NewsPostManager(models.Manager):
def search(self, search_terms):
terms = [term.strip() for term in search_terms.split()]
q_objects = []
for term in terms:
q_objects.append(Q(title__icontains=term))
q_objects.append(Q(content__icontains=term))
# Start with a bare QuerySet
qs = self.get_query_set()
# Use operator's or_ to string together all of your Q objects.
return qs.filter(reduce(operator.or_, q_objects))
据我了解,这不适用于 GIS 对象,因为它不会调用 models.GeoManager()。有没有办法用这个附加功能扩展 models.GeoManager?
您可以添加 extra manager methods. In the case of geodjango you have to override the default manager (objects) with a GeoManager。 您需要覆盖 models.GeoManager 而不是 models.Manager 才能在这种情况下拥有自定义管理器。