2014-08-15 3 views
0

Я создал модели для листинга на сайте. Вот мои моделиПоиск по нескольким моделям в 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 или жестко закодированную, как указано выше?

ответ

0

Используя представления на основе классов, вы можете использовать FormView. Посмотрите: https://docs.djangoproject.com/en/1.6/topics/class-based-views/generic-editing/

+0

Можете ли вы подробнее рассказать? В документации мало информации. Я хочу знать, как мне отображать форму на веб-сайте, как получить пользователя lat и lang в модели ... и т.д. –

+0

В вас FormView (ы), form_class = YourFrom сделает форму доступной. С помощью аргумента queryset вы можете указать данные. – rmcc

+0

Хорошо, я понял. Благодарю. –

Смежные вопросы