我有一个 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 文档中看到了多种访问数据库的方法(GeoJSON 层视图、Tiled GeoJSON 层视图、GeoJSON 模板过滤器、低级序列化)。但是我很难找到满足我需求的方法,因为我的属性在产品模型中,我的坐标在位置模型中,而我的查询集在不相关的基于类的视图中。
对执行我的任务的最佳方式有任何想法吗?我应该继续使用 django-geojson 还是有更好的应用程序适合我的目的?