У меня есть 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>