Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django-将多个查询合并为一个查询_Django_Django Models_Django Queryset_Geodjango - Fatal编程技术网

django-将多个查询合并为一个查询

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 =

我想找到半径在100英里范围内带有某个标签的
记录。我有两个独立工作的查询(见下文),但我不知道如何将它们组合在一起

另外,
记录
模型有一个外键,指向名为
地理位置
模型。我希望能够一次显示两个模型的字段
(记录
地理位置
)。我尝试了使用
。在下面的
地理位置
查询中选择_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英里半径内找到带有特定标签的记录?谢谢你的时间和帮助。