我已经看到了一些类似的问题,但没有任何东西可以指向我希望的方向。我有一种情况,我有一个模型建立的标准django形式。此表单有一个下拉框,您可以在其中选择要发表评论的项目。现在,我希望人们能够按项目浏览,然后单击链接以对该特定项目发表评论。我想要的是当用户点击该链接时,他们将使用相同的旧表单呈现,但是,保管箱将默认为他们想要评论的项目。
使用现有表格是否有理智的方法? 我应该完全为这种需要创建一个单独的表单吗?
作为一个说明,这不是一个真正的评论系统,并不打算。我的一个想法是构建网址:
comment/?q=item1
捕获'item1'部分,然后覆盖保存功能以强制进入表单,同时将公司隐藏在表单中。从UI的角度来看,我对这个想法并不欣喜若狂。有什么想法或想法吗?
答案 0 :(得分:1)
如果我正确地阅读你的问题,这是一个相当常见的用例并得到django表格的良好支持。您可以对所描述的两种方案使用相同的表单。
假设要评论的项目具有主键5.您将为用户构建一个链接,使用如下所示的URL进行单击:
<a href="/comment/5/">Comment on me</a>
(这也适用于slug字段,但请参阅以下评论,标识符必须与字段选项中的ID匹配:/ comment / my_item_1 /)
您的视图会选取参数,并将其传递给initial
参数中的表单:
def show_comment_form(request, item_id):
form = MyCommentForm(initial={'item_drop_down':item_id})
表格将与预先选择的下拉列表一起显示。当然,要使此示例起作用,item_id
参数必须匹配项目字段的任何选项标识符(如果它是在模型字段之外自动构建的,因为它听起来可能是该项的主键。可用项目的课程。
我的意思是,如果选择看起来像:
choices = ( (1, 'Item 1'),
(2, 'Item 2') )
然后item_id
应为1或2,因为结果<select>
选项中的内容(即:<option value="1">Item 1</option>
)。自动创建的ModelForm类将为您解决此问题,否则请保持警惕。
您可以在django文档中找到更多信息:Dynamic Initial Values