擅长:python、mysql、java
<p>这种方法的问题在于<code>queryset</code>值是在类创建时执行的,也就是说,当您第一次启动Python解释器并加载所有Django内容时。<code>request</code>对象不是在这里创建的,而是在您开始从用户获取请求后创建的</p>
<p>根据<a href="https://docs.djangoproject.com/en/3.0/ref/forms/fields/#modelchoicefield" rel="nofollow noreferrer">documentation</a>,您可以在类实例化时执行此操作,将<code>queryset</code>参数设置为<code>None</code>并写入</p>
<h3>forms.py</h3>
<pre class="lang-py prettyprint-override"><code>class ListDataForm(forms.Form):
...
listdata = forms.ModelChoiceField(queryset=None)
...
def __init__(self, *args, **kwargs):
request = kwargs.pop('request', None)
super().__init__(*args, **kwargs)
if request:
user = request.user
self.fields['listdata'].queryset = List.objects.filter(author=user)
</code></pre>
<p>然后,在您看来,按如下方式创建此表单</p>
<h3>views.py</h3>
<pre class="lang-py prettyprint-override"><code>def form_view(request):
...
form = ListDataForm(request=request)
...
</code></pre>