django-将多个查询合并为一个查询
我想找到半径在100英里范围内带有某个标签的django-将多个查询合并为一个查询,django,django-models,django-queryset,geodjango,Django,Django Models,Django Queryset,Geodjango,我想找到半径在100英里范围内带有某个标签的记录。我有两个独立工作的查询(见下文),但我不知道如何将它们组合在一起 另外,记录模型有一个外键,指向名为地理位置的模型。我希望能够一次显示两个模型的字段(记录和地理位置)。我尝试了使用。在下面的地理位置查询中选择_related(),但出于某种原因,我只让它显示地理位置模型字段,而不是我预期的其他记录模型字段 tag_search = Records.objects.filter(tags__slug__in=[tag]) geo_search =
记录。我有两个独立工作的查询(见下文),但我不知道如何将它们组合在一起
另外,记录
模型有一个外键,指向名为地理位置
的模型。我希望能够一次显示两个模型的字段(记录和地理位置)。我尝试了使用。在下面的地理位置查询中选择_related()
,但出于某种原因,我只让它显示地理位置模型字段,而不是我预期的其他记录模型字段
tag_search = Records.objects.filter(tags__slug__in=[tag])
geo_search = GeoLocation.objects.select_related().filter(srid2163__distance_lte=(pnt, D(mi=100))).distance(pnt)
有什么想法吗
这些是我的模型:
from taggit.managers import TaggableManager
from django.contrib.gis.db import models
class GeoLocation (models.Model):
lat = models.FloatField(blank=True)
long = models.FloatField(blank=True)
srid2163 = models.PointField(blank=True,srid=2163)
server_time = models.DateTimeField(auto_now_add=True)
objects = models.GeoManager()
def __unicode__(self):
return u'%s %s %s' % (self.lat, self.long, self.server_time)
class Records(models.Model):
title = models.CharField(blank=True, max_length=50)
message_body = models.TextField()
server_time = models.DateTimeField(auto_now_add=True)
geo_location = models.ForeignKey(GeoLocation, related_name='geoloc')
tags = TaggableManager()
def __unicode__(self):
return u'%s %s %s' % (self.title, self.message_body, self.server_time)
对于我使用的记录
模型中的标记
字段。这里有两个错误
首先,您误解了select\u related()
的作用。它不会将相关模型中的字段带入当前模型。相反,它只是预取相关实例,这样在相关模型上执行model\u instance.foreignkey\u field.field\u不会导致另一次数据库命中
其次,你的模型与你最初所说的外键相矛盾。你说它是从地理位置到记录的,但模型的定义表明,情况正好相反select_related
在这个方向上不起作用-考虑到您当前的模型,无法查询地理位置并一次性获得相关记录。但是,您可以查询记录并获取相关的地理位置
(第三,你对我关于在
查找中使用单个元素的评论的回答是完全不相关的。请出示您的实际型号。2.为什么要在
中对单个元素列表使用,而不仅仅是tags\uuu slug=tag
?3.您是如何看到您的地理定位
对象没有预取相关的记录的?@Daniel Roseman 1。请参见上面的模型。2.这是因为我在标记字段中使用djago-taggit来搜索标记。3.我在我的模板中进行了如下测试{geo_search%}{{geo.lat}{{geo.title}{%endfor%}。我可以看到{{geo.lat}}的内容,但看不到{{geo.title}}。感谢您澄清与select_相关的工作原理以及标记过滤器的问题。你是对的,当我说是从地理位置到唱片的时候,我把事情搞砸了,而事实恰恰相反——对此我很抱歉。我对问题进行了编辑,以反映我首先应该问的问题。还有一个问题。考虑到上述模型,是否有办法在100英里半径内找到带有特定标签的记录?谢谢你的时间和帮助。