Я создал модели для листинга на сайте. Вот мои моделиПоиск по нескольким моделям в django
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")
....
Итак, я хочу что пользователь может искать список через «тегов», «ш» и «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 или жестко закодированную, как указано выше?
Можете ли вы подробнее рассказать? В документации мало информации. Я хочу знать, как мне отображать форму на веб-сайте, как получить пользователя lat и lang в модели ... и т.д. –
В вас FormView (ы), form_class = YourFrom сделает форму доступной. С помощью аргумента queryset вы можете указать данные. – rmcc
Хорошо, я понял. Благодарю. –