Найти - Пользователи
Полная версия: django haystack (elasticsearch) - No results
Начало » Django » django haystack (elasticsearch) - No results
1
kaldown
Здравсвуйте.

Подскажите пожалуйста в чем ошибка.
Пытаюсь добавить форму поиска на SearchView

class Moderate(SearchView):
    @method_decorator(staff_member_required)
    def dispatch(self, *args, **kwargs):
        return super(Moderate, self).dispatch(*args, **kwargs)
    model = Ad
    template_name = 'adapp/ad_moderate.html'
    def get_queryset(self):
        qs = super(Moderate, self).get_queryset().filter(ad_type__isnull=False,
                                                           ad_sub_type__isnull=False)
   
        return qs
    def get_context_data(self, **kwargs):
        context = super(Moderate, self).get_context_data(**kwargs)
        context['filter'] = ModerateFilter(self.request.GET)
     
        return context
    # define method to recieve fields from form, and change data accordings
    def post(self, request, *args, **kwargs):
        selected = request.POST['selected']
        record = Ad.objects.get(pk=int(selected))
        form = ModerateForm(request.POST, instance=record)
        if form.is_valid():
            form.save(commit=True)
            return HttpResponseRedirect('')
форма для фильтрации, передаю передаю через get_context_dat() -> context
     <form action="" method="get">
        {{ filter.form.as_p }}
        <input type="submit">
    </form>
форма для поиска, которая вот и не работает на моей странице, зато прекрасно себя чувствует на /search
    <h2>Search</h2>
    <form method="get" action="">
        <table>
            {{ form.as_table }}
            <tr>
                <td>&nbsp;</td>
                <td>
                    <input type="submit" value="Search">
                </td>
            </tr>
        </table>
        {% if query %}
            <h3>Results</h3>
            {% for result in page.object_list %}
                <p>
                    <a href="{{ result.object.get_absolute_url }}">{{ result.object.title }}</a>
                </p>
            {% empty %}
                <p>No results found.</p>
            {% endfor %}
        {% else %}
            {# Show some example queries to run, maybe query syntax, something else? #}
        {% endif %}
    </form>
форма для мзменения конкретного поля модели
                     <form action="" method="POST">
                        {% csrf_token %}
                        <input type="radio" name="moderated" value="True">Accept
                        <br>
                        <input type="radio" name="moderated" value="False">Decline
                        <input type="hidden" value="{{ object.id }}"
                        name="selected">
                        <input class="btn" type="submit" value="moderate">
                    </form>
 

Ровно такой кусок я вставил в ad_moderate.html, который является темплейтом для Moderate(SearchView)

http://stackoverflow.com/questions/32932795/haystack-on-existing-template


У меня на странице должно быть 3 формы.
1 - django-filter, которую я передаю через context и потом в темплейте filter.form.as_p
2 - собсно 2 кнопочки которые отправляют некоторое значение по нажатии на них через POST, для каждого объекта
3 - сам haystack.elasticksearch

Подскажите, чейта сволочь кровь мою пьет

Конечно же больше спасибо.
Форма то есть, она даже возвращает No Results, но вот если зайти на /search, где и установлен url(r'^search'), то он работает, а на моей странице /moderator не хочет
balalay12
form method=“get”

def post(self, request, *args, **kwargs):
kaldown
balalay12
form method=“get”


def post(self, request, *args, **kwargs):
вот post какраз сделал для одной из формочек, с кнопками.
Сейчас добью остальным кодом, чтоб не путаться.
kaldown
Ваще не пойму.
Мне нужно писать собственную форму если использую SearchView или же нет? Потому что она появляется сама, но результатов не выдает не пойму в чем причина.
Вообще не хочет работать если в urls добавить urls(r'^page/$' MyPageView.as_view()), то появляется форма, но не выдает результатов, зато прекрасно себя чувствует если urls(r'^/page$', include('haystack.urls')), но тогда отсутствует вся логика из моего view .
Как их скрестить то?

Пасибо.

P.S. тут впихнул сразу весь код.
http://stackoverflow.com/questions/32932795/haystack-on-existing-template
balalay12
Попробуй через SearchQuerySet(). По мне так удобнее, не надо париться с формами.

Пример
class Search(ListView):
    template_name = "search/search.html"
    context_object_name = "result"
    def get_queryset(self):
        sqs = SearchQuerySet().filter(Q(name=Clean(self.request.GET.get("q"))) | Q(name=Clean(self.request.GET.get("q")))).models(Model).load_all()
        return sqs
kaldown
get_context_data():
    context['results'] = SearchForm(self.request.GET).search()

надо было еще .search() дописать.

Как-то с горем пополам вроде нашел “выход”

пасибо http://igorakintev.ru/blog/6-django-haystack-elasticsearch-prostoj-primer/

Теперь надо вьехать, почему выстраивается такая странная ветвь, а то у меня с result in results не подойдет в первоначальном коде.
for result in results:
    result.object.title
а не просто
for result in results:
    result.title

Спасибо.
balalay12
В result лежaт экземпляры SearchResult.
Для того чтобы получить ссылку на экземпляр джанговского объекта нужно обращаться к свойству object.
В противном случае получите то, что положили в индекс.

Как-то так.
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