我无法从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时出现问题
答案 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()
返回列表。