在django中搜索多个模型

时间:2014-08-15 05:21:47

标签: django django-models django-queryset

我为上市网站创建了模型。 这是我的模特

class Listing(models.Model):
    title = models.CharField(max_length=100)
    type  = models.CharField(max_length=100)
    tags = TaggableManager()
    .....

class Address(models.Model):
    listing =  models.OneToOneFielSo, d(Listing, related_name='address')
    address = models.CharField(max_length=800)
    postcode = models.IntegerField()
    lat = models.FloatField("Latitude")
    lng = models.FloatField("Longitude")
    .... 

因此,我希望用户能够通过'标记来搜索列表,' lat'并且' lng'。 '标签'作为关键字,' lat lng'作为某个范围的参考点。 例如:搜索' House' (关键字)5KM范围内的地方(lat,lng),其中'类型'出租'。

这里的问题是搜索中涉及3个模型。我不知道如何开始。 我在想的是编写一个html表单:

<form method="get" action="/search/">
<label>Keyword</label><input type="text" name="q" value="">
<label>Range</label><input type="text" name="r" value="">
<label>Type</label><input type="text" name="t" value="">
<input type="hidden" name="p" value="{{lat, lng}}">//get from browser
</form>

在我的view.py

def search(request):
    q = request.GET.get("q")
    r = request.GET.get("r")
    t = request.GET.get("t")
    p = request.GET.get("p")
    range = calculate_range(p)#method to calculate the range
    filter = Listing.objects.filter(tags__name__in=[q], status=t, 
            address__lat__range=(range.lat.start, range.lat.end),
            address__lng__range=(range.lng.start, range.lng.end))
   ......

这是一个正确的方法吗?我认为有更好的方法来做到这一点。但我不知道怎么做。您是否需要从form.py或上面的硬编码创建搜索表单?

1 个答案:

答案 0 :(得分:0)

使用基于类的视图,您可以使用FormView。看看:https://docs.djangoproject.com/en/1.6/topics/class-based-views/generic-editing/