我有一个Django应用,每个用户都可以添加具有多个可能指标(宽度,高度和长度组合)的产品。用户还必须指定此产品位于哪个城市。 用户还可以在数据库中搜索与特定指标匹配的所有产品。 我使用Django 1.11,正在寻找一种解决方案,以便在交互式地图上显示与查询集匹配的所有产品。
我正在尝试使用django-leaflet和django-geojson(因为我的数据库不是基于gis的,并且我不需要繁琐的地理计算),但是我面临一些困难,因为我的“ PointField”不在我的产品模型中,而是在位置模型中和地图上,我需要显示“产品”属性,因此必须将所有这些数据一起序列化。
如果您更喜欢代码而不是文字,这是我相关文件的简化版本。
#models.py
class Product(models.Model):
name = models.CharField()
owner = models.ForeignKey(User)
photo = models.ImageField(...)
dimensions = models.ManyToManyField(Metrics)
location = models.ForeignKey(Location,related_name='products',related_query_name='product')
class Metrics(models.Model):
width = models.PositiveIntegerField()
height = models.PositiveIntegerField()
length = models.PositiveIntegerField()
class Location(models.Model):
zip_code = models.PositiveIntegerField()
city_name = models.CharField()
slug = models.SlugField(max_length=500,blank=True)
geom = PointField(default={'type': 'Point','coordinates': [0,0]})
#views.py
class SearchResultListView(ListView):
model = models.Product
template_name='my_app/searchresult_list.html'
context_object_name = 'product_list'
def get_context_data(self,**kwargs):
context = super().get_context_data(**kwargs)
query_width = self.request.GET['width']
query_height = self.request.GET['height']
query_length = self.request.GET['length']
context['product_list'] = context['product_list'].filter(metrics__width=query_width,metrics__length=query_length,metrics__height=query_height)
return context
#urls.py
????
#template.html
????
我在django-geojson文档中看到了多种方法来访问db(GeoJSON图层视图, 平铺的GeoJSON图层视图,GeoJSON模板过滤器,低级序列化)。但是我很难找到满足我的需求的方法,因为我的属性位于产品模型中,坐标位于位置模型中,而查询集位于不相关的基于类的视图中。
对执行任务的最佳方式有任何想法吗?我应该继续使用django-geojson还是我有更好的应用程序?