Найти - Пользователи
Полная версия: Порекомендуйте простой поиск
Начало » Django » Порекомендуйте простой поиск
1
rss
Новичок. Целый день читаю, никак не пойму главного. Что лучше?
Нужны(то что и хотелось бы): простые выборки(поиск) из базы, типа как тут http://est.ua/
…не включая полнотекстный поиск…
Если я правильно понимаю - полнотекстный - это поиск из TextField или CharField.

Что лучше, быстрее и проще реализовать:
.просто собрать самому (или потом придется дописывать и дописывать, что в итоге лучше бы воспользовался чем-то готовым)
.Django-Sphinx - тут не понятно, слово - полнотекстный - т.е. Возможно ли также просто реализовать то что я хочу
.Django-haystack - вроде как все есть, но все то и не надо, надо только то что хотелось бы и быстрее, проще и пр.
.или еще что-то

Гуру подскажи, в какую сторону потратить время?
Спасибо
FishHook
На самом деле такая фильтрация делается очень просто.
Смотрите какая идея
#models.py
class City(models.Model):
    name = models.CharField(..)
class MyModel(models.Model):
    city = models.ForeignKey(City)
    cost = models.IntegerField() 

#forms.py
class MyModelForm(forms.Form):
    city__id = forms.ChoiceField(choices = [ (x.id, x.name) for x in City.objects.all()] )
    cost__gt = forms.IntegerField() 
    cost__lte = forms.IntegerField() 

#views.py
form = MyModelForm(request.GET)
query = MyModel.objects.all()
if form.is_valid():
    for field_name, value in form.cleaned_data.items():
        query = query.filter(**{field_name: value})
rss
Просто отлично! Спасибо!

Подскажите, еще с MultipleChoiceField, в этой же конструкции… если скажем у City, есть еще список районов, поиск по которым MultipleChoiceField

district__id = forms.ModelMultipleChoiceField(querysetistricts.objects.all(), widget=forms.CheckboxSelectMultiple,)

FishHook
Вам поможет функция Q и операторы | и &
комбинируя их Вы сделаете почти всё
bismigalis
FishHook
класный трюк, сейчас как раз понадобилось, заюзал, спсб

rss
тоже юзаю MultipleChoiceField

сделал по быстрому так, может можно по-красивше
for field_name, field_value in form.cleaned_data.items():
    if type(field_value) == list:
        ored = None
        for value in field_value:
            if ored:
                ored |= Q(**{field_name: value})
            else:
                ored = Q(**{field_name: value})
        if ored:
            query = query.filter(ored)
    else:
        query = query.filter(**{field_name: field_value})
FishHook
Простится такое решение
f = field_value if isinstance(field_value, list) else [field_value] 
ored = reduce(operator.or_, [Q(**{field_name: value}) for value in f]
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB