从POST数据中提取多个pk,Django

时间:2019-05-14 07:57:10

标签: django django-views

我无法从request.POST中提取多个“ 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列表,然后过滤查询集并获取文章列表,然后提取其标题并通过消息传递框架将其发送给用户。非常简单。 PK列表由ModelMultipleChoiceField以格式发送给POST数据

我在POST数据中拥有什么:

'csrfmiddlewaretoken'

['DxrzPApYhtxh6ZCqszkvBkywbBTPIaXtpTZTjdJQEFCTqR0vSNXycAcJJnh3jnRC']

'pk'

['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列表以查询设置过滤器?

当我有奇数pk时-可以正常工作。我只有多个PK时出现问题

1 个答案:

答案 0 :(得分:1)

您可以使用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()返回列表。