django按当前用户形式查询过滤器 [英] django form queryset filter by current user

查看:156
本文介绍了django按当前用户形式查询过滤器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我做了这样的搜索表单,用户可以根据发布日期和他们以前选择的抓取工具过滤新闻。这是我的表单



<$ p
pub_date_from = forms.CharField(label =From,max_length = 20)
pub_date_to = forms.CharField(label = To,max_length = 30)
crawler = forms.ModelMultipleChoiceField(label =Crawler,queryset = Crawler.objects.filter(created_by = self.request.user)



在这里,我希望只显示用户之前选择的抓取工具。



是我的看法..

  class SingleNewsView(ListView):
model = News
form_class = SearchForm
template_name =single_news.html

def post(self,request,** kwargs):
#printrequest
#form = SearchForm(request .user)


$ b def get(self,request,pk,** kwargs):

#form = SearchForm(request.user)
self.pk = pk

self.pub_from = request.GET.get('pub_date_from',False)
self.pub_to = request.GET.get('pub_date_to',False)
self.crawlers = request.GET.get('crawler',False)
self.format = request.GET.get('format',False)
print self.format

打印self.crawlers


返回超级(SingleNewsView,self).get(request,pk,** kwargs)



def get_context_data(self,** kwargs):

context = super(SingleNewsView,self).get_context_data(** kwargs)
context [form] = SearchForm
如果self.pub_from和self.pub_to和self.crawlers:
qs = News.objects.filter(category_id = self.pk).filter(published_date__range =(self.pub_from,self.pub_to), crawler = self.crawlers)
else:
qs = News.objects.filter(category_id = self.pk)

context [something] = qs
self.request.session ['something_pks'] = [i.details for i in qs]

返回上下文

如何根据当前用户获取当前用户的表单和过滤器..需要帮助

解决方案

只需传递用户即可在视图中以关键字参数的形式显示。

<只是不要以表单init方法传递它。看看这篇文章:



通过* * kwargs to Django Form



您将request.user与user_details一样传递到表单中。


I have made a search form like this where user can filter the news accroding to published date and the crawlers that they have selected previously.. Here is my form

class SearchForm(forms.Form):
pub_date_from = forms.CharField(label="From",max_length=20)
pub_date_to = forms.CharField(label="To",max_length=30)
crawler = forms.ModelMultipleChoiceField(label="Crawler",queryset=Crawler.objects.filter(created_by=self.request.user)

Here I want the crawler to be shown only the user have selected previously..

Here is my view..

class SingleNewsView(ListView):
model = News
form_class = SearchForm
template_name = "single_news.html"

# def post(self, request, **kwargs):
#   print "request"
#   form = SearchForm(request.user)



def get(self, request, pk, **kwargs):

    #form = SearchForm(request.user)
    self.pk = pk

    self.pub_from = request.GET.get('pub_date_from',False)
    self.pub_to = request.GET.get('pub_date_to',False)
    self.crawlers = request.GET.get('crawler',False)
    self.format = request.GET.get('format',False)
    print self.format

    print self.crawlers


    return super(SingleNewsView,self).get(request,pk, **kwargs)



def get_context_data(self, **kwargs):

    context = super(SingleNewsView,self).get_context_data(**kwargs)
    context["form"] = SearchForm
    if self.pub_from and self.pub_to and self.crawlers:
        qs = News.objects.filter(category_id=self.pk).filter(published_date__range=(self.pub_from,self.pub_to), crawler=self.crawlers)
    else:
        qs = News.objects.filter(category_id=self.pk)

    context["something"] = qs
    self.request.session['something_pks'] = [ i.details for i in qs ]

    return context

How can I get the current user in form and filter according to current user.. Need help

解决方案

Just pass the user to form in view as keyword argument.

Just don't pass it on in form init method. Check out this post:

Passing **kwargs to Django Form

you hand over request.user just like user_details are passed into form in that example.

这篇关于django按当前用户形式查询过滤器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆