Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 1, 2015 21:12:58

kaldown
Зарегистрирован: 2015-07-16
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

django haystack (elasticsearch) - No results

Здравсвуйте.

Подскажите пожалуйста в чем ошибка.
Пытаюсь добавить форму поиска на 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 не хочет

Отредактировано kaldown (Окт. 4, 2015 16:41:13)

Офлайн

#2 Окт. 2, 2015 07:19:58

balalay12
Зарегистрирован: 2014-07-28
Сообщения: 92
Репутация: +  4  -
Профиль   Адрес электронной почты  

django haystack (elasticsearch) - No results

form method=“get”

def post(self, request, *args, **kwargs):

Офлайн

#3 Окт. 2, 2015 13:18:28

kaldown
Зарегистрирован: 2015-07-16
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

django haystack (elasticsearch) - No results

balalay12
form method=“get”


def post(self, request, *args, **kwargs):
вот post какраз сделал для одной из формочек, с кнопками.
Сейчас добью остальным кодом, чтоб не путаться.

Отредактировано kaldown (Окт. 2, 2015 13:20:03)

Офлайн

#4 Окт. 4, 2015 12:52:26

kaldown
Зарегистрирован: 2015-07-16
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

django haystack (elasticsearch) - No results

Ваще не пойму.
Мне нужно писать собственную форму если использую 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

Отредактировано kaldown (Окт. 4, 2015 14:26:24)

Офлайн

#5 Окт. 4, 2015 16:37:35

balalay12
Зарегистрирован: 2014-07-28
Сообщения: 92
Репутация: +  4  -
Профиль   Адрес электронной почты  

django haystack (elasticsearch) - No results

Попробуй через 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

Офлайн

#6 Окт. 4, 2015 18:31:08

kaldown
Зарегистрирован: 2015-07-16
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

django haystack (elasticsearch) - No results

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

Спасибо.

Отредактировано kaldown (Окт. 4, 2015 19:21:14)

Офлайн

#7 Окт. 4, 2015 19:22:38

balalay12
Зарегистрирован: 2014-07-28
Сообщения: 92
Репутация: +  4  -
Профиль   Адрес электронной почты  

django haystack (elasticsearch) - No results

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

Как-то так.

Отредактировано balalay12 (Окт. 4, 2015 19:32:12)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version