извлечь несколько ПК из POST-данных, Джанго - PullRequest
1 голос
/ 14 мая 2019

У меня проблемы с извлечением нескольких «pk» данных из запроса. Не могу обдумать это, но я чувствую, что ответ должен быть легким и / или вопрос тупой (опционально:)).

На мой взгляд, у меня есть следующий метод:


def post(self, request, *args, **kwargs):
    form = self.get_form()
    if form.is_valid():
        articles = Article.default.filter(id__in=self.request.POST["pk"])
        article_titles = [article.title for article in articles]
        message = article_titles
        messages.add_message(request, messages.SUCCESS, message=message, fail_silently=True)
        return self.form_valid(form)
    else:
        return self.form_invalid(form)


# what is defaul  - default = models.Manager() ,that is equal to objects

Технически, он должен извлечь список ПК из данных постов, затем отфильтровать набор запросов и получить список статей, затем извлечь их заголовки и отправить их пользователю через систему обмена сообщениями. Довольно просто. Список PK отправляется в данные POST с помощью ModelMultipleChoiceField в форме

Что я имею в данных POST:

csrfmiddlewaretoken '

[ 'DxrzPApYhtxh6ZCqszkvBkywbBTPIaXtpTZTjdJQEFCTqR0vSNXycAcJJnh3jnRC']

рк '

['34', '32', '25', '24', '22', '11']

'Отправить'

[ '']

и, что удивительно, на этих данных POST у меня следующий набор запросов:

SELECT ••• FROM "articles_article" WHERE "articles_article"."id" IN (1) ORDER BY "articles_article"."created_at" DESC 

вопрос:

-Почему IN (1)?

- как получить список пакетов в данных POST для фильтра набора запросов?

когда у меня есть единственное число pk -it работает нормально. Проблема, когда у меня есть только несколько ПК

1 Ответ

1 голос
/ 14 мая 2019

Вы можете использовать getlist() метод:

pks = request.POST.getlist('pk')

Это должно работать на основе ваших данных, но если вы в конечном итоге использовали jQuery, вам, вероятно, нужно сделать это:

pks = request.POST.getlist('pk[]')

Также есть метод get(), чтобы получить только одни данные.Это лучший выбор, чем использование прямых ключей, так как он не проходит через ошибку и вместо этого возвращает None или значение по умолчанию, если вы его установите:

request.POST.get('pk') # returns one pk or None if there is not pk

Со значением по умолчанию:

request.POST.get('pk', 0) # returns one pk or 0 if there is not pk

get() и getlist() совпадают с той разницей, что getlist() возвращает список.

...