基于查询/段塞因子填充表单域

时间:2009-04-03 21:58:48

标签: python django-forms

我已经看到了一些类似的问题,但没有任何东西可以指向我希望的方向。我有一种情况,我有一个模型建立的标准django形式。此表单有一个下拉框,您可以在其中选择要发表评论的项目。现在,我希望人们能够按项目浏览,然后单击链接以对该特定项目发表评论。我想要的是当用户点击该链接时,他们将使用相同的旧表单呈现,但是,保管箱将默认为他们想要评论的项目。

使用现有表格是否有理智的方法? 我应该完全为这种需要创建一个单独的表单吗?

作为一个说明,这不是一个真正的评论系统,并不打算。我的一个想法是构建网址:

comment/?q=item1

捕获'item1'部分,然后覆盖保存功能以强制进入表单,同时将公司隐藏在表单中。从UI的角度来看,我对这个想法并不欣喜若狂。有什么想法或想法吗?

1 个答案:

答案 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