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 才能在这种情况下拥有自定义管理器。