Запрос на публикацию недоступен внутри функции get_queryset внутри ListView - PullRequest
0 голосов
/ 27 апреля 2018

В ListView, я могу легко использовать def post (self, request) метод, чтобы сделать запрос на публикацию из списка. Но я хочу сделать почтовый запрос от def get_queryset (self) , который я пока не могу сделать. Когда я пытаюсь это сделать, он показывает « метод 405 не разрешен! », даже если метод post разрешен через http_method_names .

Как я могу получить доступ к POST-запросу внутри get_queryset функции?

class ZonListView(SearchMixin, SingleTableMixin, ListView):
    template_name = 'cadmin/list.html'
    model = Zon
    table_class = ZonTable
    search_fields = {
        'title': 'icontains',
        'description': 'icontains',
    }

def post(self, request):  # ***** this one works! ******
    try:
        toggle_status = request.POST.get('toggle-status')
        pk = int(request.POST.get('pk'))
        ....
    return HttpResponseRedirect(reverse('cadmin:zon_list'))

def get_queryset(self):
    qs = super(ZonListView, self).get_queryset()

    if self.request.POST:   #*****  Not working. 405 Error *****#
        try:
            toggle_status = self.request.POST.get('toggle-status')
            pk = int(self.request.POST.get('pk'))
            ......

    if self.request.GET:
        try:
            status = self.request.GET.get('status')
            qs = qs.filter(status=status)
        except Exception:
            pass

    return qs.distinct()

def get_context_data(self, **kwargs):
    ....

1 Ответ

0 голосов
/ 27 апреля 2018

Чтобы сделать метод разрешенным, вам нужно реализовать функцию с именем, аналогичным методу, в вашем случае - post. Поэтому, чтобы использовать request.POST в наборе запросов get, вам также необходимо определить метод post() следующим образом:

def post(self, request):  # ***** this method required! ******
    self.object_list = self.get_queryset() 
    return HttpResponseRedirect(reverse('cadmin:zon_list'))

def get_queryset(self):
    qs = super(ZonListView, self).get_queryset()

    if self.request.POST:   #*****  Now allowed *****#
        try:
            toggle_status = self.request.POST.get('toggle-status')
            pk = int(self.request.POST.get('pk'))
......

Посмотрите на View источник Django , чтобы проверить, как определены разрешенные методы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...