这只是困扰我的好奇心。我创建了一个 Form 类来处理从数据库中选择的文档。自然,必须从数据库中获取文档列表以填充可用选项。通过手动构建选择并使用 ChoiceField,我得到了“陈旧”的行为。但是当使用 ModelChoiceField 选项“queryset”时,我得到了准确的结果。
“陈旧”是指如果我上传新文档并呈现页面,列表仅显示旧文档集(有时即使在刷新页面后仍然存在,根据视图逻辑应该重新生成表单 - 证明这是事实,无论用例如何,第二种方法都按预期工作)。示例如下:
旧版本:
class GetDocumentForm(forms.Form):
document_query = Document.objects.all().order_by('docfile')
document_choices = []
for document in document_query:
document_choices.append((document.id, document.docfile.name))
document = forms.ChoiceField(label='', choices=document_choices)
准确版:
class GetDocumentForm(forms.Form):
document = forms.ModelChoiceField(queryset=Document.objects.all())
是什么赋予了?有什么不同?为什么他们的行为不同?