我为上市网站创建了模型。 这是我的模特
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或上面的硬编码创建搜索表单?
答案 0 :(得分:0)
使用基于类的视图,您可以使用FormView。看看:https://docs.djangoproject.com/en/1.6/topics/class-based-views/generic-editing/