0

我见过一些类似的问题,但没有什么能完全指出我希望的方向。我有一种情况,我有一个基于模型的标准 django 表单。此表单有一个下拉框,您可以在其中选择要发表评论的项目。现在我希望人们能够按项目浏览,然后单击链接以评论该特定项目。我想要的是,当用户单击该链接时,他们将看到相同的旧表单,但是,保管箱将默认为他们想要评论的项目。

有没有一种理智的方法可以用现有的形式做到这一点?我应该完全为这个需要创建一个单独的表格吗?

请注意,这不是一个真正的评论系统,也不打算这样做。我的一个想法是构建如下网址:

comment/?q=item1

捕捉“item1”部分,然后通过保存功能强制将其放入表单中,同时将公司隐藏在表单中。从 UI 的角度来看,我对这个想法并不欣喜若狂。有什么想法或想法吗?

4

1 回答 1

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 文档中找到更多信息:动态初始值

于 2009-04-03T23:02:06.837 回答