Передать данные из FormView в DetailView - PullRequest
0 голосов
/ 01 ноября 2018

Я пытаюсь включить Celery в свой проект, чтобы он асинхронно создавал объект Hashtag. Однако мне нужно проверить, был ли объект Hashtag создан Celery. Для этого я переопределил get() в SearchResultsView с помощью:

if Hashtag.objects.filter(search_text=self.search_text).exists():.

В частности, я не уверен, почему search_text=self.search_text не работает? Возможно, требуется, чтобы я переопределил get_context_data в FormView, чтобы передать данные search_filter в DetailView? В качестве альтернативы, я должен использовать self.get_object() в get() перед использованием оператора if?

Models.py

class Hashtag(models.Model):
    search_text = models.CharField(max_length=140, primary_key=True)

Views.py

class HashtagSearch(FormView):
    model = Hashtag
    form_class = SearchHashtagForm

    def get_success_url(self, search_filter, **kwargs):
        return reverse('mapping_twitter:results', kwargs={'pk':search_filter})

    def form_valid(self, form):
        search_filter = self.get_tweets(form)
        iterate_tweets.delay(search_filter)
        return HttpResponseRedirect(self.get_success_url(search_filter))

    def get_tweets(self, form):
        search_filter = self.request.POST.get('search_text').lower().lstrip("#")
        return search_filter


class SearchResultsView(DetailView):
    model = Hashtag
    template_name = 'mapping_twitter/results.html'

    def get(self, request, *args, **kwargs):
        if Hashtag.objects.filter(search_text=self.search_text).exists():
             self.draw_histogram(request)
        return super(SearchResultsView, self).get(request, *args, **kwargs)

    def get_context_data(self, **kwargs):
        context = super(SearchResultsView, self).get_context_data(**kwargs)
        return context

1 Ответ

0 голосов
/ 01 ноября 2018

Я предполагаю, что проблема связана с вашим «супер». Ваш 'get' возвращает то, что SearchResultsView.get () унаследовал от DetailView.get (), но не изменяет объект с вашими конкретными дополнениями. Может быть:

def get(self, request, *args, **kwargs):
    s = super(SearchResultsView, self).get(request, *args, **kwargs)  
      #s is a [httpResponse][1] object
    if Hashtag.objects.filter(search_text=self.search_text).exists():
         s['hist'] = self.draw_histogram(request)
    return s

https://docs.djangoproject.com/en/2.1/ref/request-response/#setting-header-fields

...