Django DetalView с простым методом get - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть CBV DetailView, и я хотел бы реализовать в нем форму поиска.Но когда я делаю это, обычный запрос через этот класс не работает.Сейчас я реализую поиск по похожему классу.Как реализовать все в одном классе.Ниже приведен список.(Переводчик Google)

urls.py

app_name = 'main'
urlpatterns = [
    ...
    path('transmitter/<int:pk>', TransmitterDetailView.as_view(), name='transmitter'),
    path('transmitter', TransmitterSearchDetailView.as_view(), name='search'),
    ...
]

views.py

@method_decorator(login_required, name='dispatch')
class TransmitterDetailView(DetailView, MultipleObjectMixin):
    model = Transmitter
    paginate_by = 5

    def get_context_data(self, **kwargs):
        state_list = self.object.state().filter().order_by('-timestamp')
        context = super().get_context_data(object_list=state_list, **kwargs)
        return context


@method_decorator(login_required, name='dispatch')
class TransmitterSearchDetailView(DetailView, MultipleObjectMixin):
    model = Transmitter
    paginate_by = 5

    def get(self, request, *args, **kwargs):
        self.object =   Transmitter.objects.get(id_transmitter=request.GET.get('id'))
        state_list = self.object.state().filter().order_by('-timestamp')
        context = super().get_context_data(object=self.object, object_list=state_list, **kwargs)
        return self.render_to_response(context)

    def get_context_data(self, **kwargs):
        state_list = self.object.state().filter().order_by('-timestamp')
        context = super().get_context_data(object_list=state_list, **kwargs)
        return context

передатчик_лист.html

<form id="searchbar" action="{% url 'main:search' %}" method="get">
 {% csrf_token %}
 <input class="form-control mr-sm-2" type="text" name="id" placeholder="Поиск" aria-label="Поиск">
 <hr>
 <button class="btn btn-outline-success my-2 my-sm-0" type="submit" value="Search">Найти</button>
 <hr>
</form>
...