【问题标题】:Populating form field based on query/slug factor根据查询/slug 因素填充表单字段
【发布时间】:2010-10-17 11:37:22
【问题描述】:

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

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

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

comment/?q=item1

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

【问题讨论】:

    标签: python django-forms


    【解决方案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,因为这就是生成的 &lt;select&gt; 选项中的值(即:&lt;option value="1"&gt;Item 1&lt;/option&gt;)。自动创建的 ModelForm 类会为您解决这个问题,否则请保持警惕。

    您可以在 django 文档中找到更多信息:Dynamic Initial Values

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-09-30
      • 2019-07-01
      • 2020-03-17
      • 2021-08-05
      • 2019-08-14
      • 1970-01-01
      • 2016-12-22
      • 1970-01-01
      相关资源
      最近更新 更多