多个查询合并为一个查询



我想在100英里半径内找到具有特定tagRecords。我有两个独立工作的查询(见下文),但我不知道如何把它们放在一起。

Records模型也有一个指向GeoLocation模型的外键geo_location。我希望能够在一个镜头中显示两个模型(RecordsGeoLocation的字段。我尝试在GeoLocation查询上使用.select_related(),但由于某种原因,我只让它显示GeoLocation模型字段,而不是像我预期的那样显示额外的Records模型字段。

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)

对于Records模型中的tags字段,我使用django-taggit。

这里有两点不对。

首先,你误解了select_related()的作用。它不会将相关模型中的字段带入当前模型。相反,它只是预取相关的实例,因此执行model_instance.foreignkey_field.field_on_related_model不会导致另一次db命中。

其次,你的模型与你最初所说的外键相矛盾。您说它是从GeoLocation到Records,但模型定义显示这是另一种方式。select_related不工作在那个方向-没有办法,给定您当前的模型,查询地理位置,并得到相关的记录在一个去。但是,您可以查询记录并获得相关的地理位置。

(第三,你对我关于使用单元素in查找的评论的回答完全无关紧要。使用tags_slug=tag .)

相关内容

  • 没有找到相关文章

最新更新