我有这个型号:
class Searches(models.Model):
user = models.ForeignKey(User)
.....other fields
每个user
都有一些已保存的搜索。我想显示form
(a choiceSelect widget
)以选择其中一个搜索,然后点击go。我希望filter
中的form
仅显示该特定searches
的{{1}}。这是我试过的。但下面的User
不起作用。如何解决这个问题?
这是我的表格:
request.user
编辑: 我的观点:
class SearchesForm(forms.Form):
#get the queryset for the searches model of logged in user
qset=Searches.objects.filter(user=request.user) ----> error
#get the most recent entry
default=Searches.objects.latest('id')
choices = forms.ModelChoiceField(queryset=qset,label='select search',initial=default)
答案 0 :(得分:5)
在服务器启动时创建查询集的instance
,并且当时不知道request
。 request
特定于每个request
在视图中创建表单时,您必须将请求传递到表单__init__
:
class SearchesForm(forms.Form):
choices = forms.ModelChoiceField(queryset=Searches.objects.none(),
label='select search')
def __init__(self, request, *args, **kwargs):
super(SearchesForm, self).__init__(*args, **kwargs)
if request.user:
queryset = Searches.objects.filter(user=request.user)
else:
queryset = Searches.objects.all()
latest = queryset.latest('id')
self.fields['choices'].queryset = queryset
def my_view(request):
if request.method == 'POST':
form = SearchesForm(request, request.POST)
if form.is_valid():
# return search template here.
return render(...)
else:
form = SearchesForm(request, request.POST)
return render(request, 'template_name.html', {'form': form})