django按当前用户形式查询过滤器 [英] django form queryset filter by current user
问题描述
我做了这样的搜索表单,用户可以根据发布日期和他们以前选择的抓取工具过滤新闻。这是我的表单
<$ 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方法传递它。看看这篇文章:
您将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屋!