【问题标题】:How do you add a scrolling div directly to a ModelForm in Django?如何将滚动 div 直接添加到 Django 中的 ModelForm?
【发布时间】:2011-09-12 10:29:00
【问题描述】:

我有以下代码,但它没有将滚动 div 放在任何地方。我尝试过的所有其他组合(例如将 div 放在桌子周围)会导致滚动条的某些或其他错误放置。 这是html:

<form action="" method="post">
  <table>
    <div style="overflow: auto; width : 200px; height : 50px;">
      {{ form }}
    </div>
    <tr><td colspan="2"><input type="submit" value="Save"/></td></tr>
  </table>
</form>

我的表单如下所示:

class GroupForm(forms.ModelForm):
    class Meta:
        model = Group

    def __init__(self, *args, **kwargs):
        super(GroupForm, self).__init__(*args, **kwargs)

        self.fields['permissions'].widget = forms.CheckboxSelectMultiple()
        self.fields['permissions'].choices = ((p.id, p.name) for p in Permission.objects.order_by("name"))

我的 views.py 看起来像这样:

def group_edit(request, group_id, template_name="group_edit.html", extra_context=None, form_class=None):

    edit_group = get_object_or_404(Group, pk=group_id)
    extra_context = extra_context or {}
    form_class = form_class or GroupForm
    extra_context["edit_group"] = edit_group

    if request.method == "POST":
        form  = form_class(instance=edit_group, data=request.POST)
        if form.is_valid():
            form.save()
            return redirect(reverse("global_group_list"))
    else:
        form = form_class(instance=edit_group)

    extra_context["form"] = form

    return direct_to_template(
        request,
        template_name,
        extra_context=extra_context
    )

【问题讨论】:

    标签: python django forms html scroll


    【解决方案1】:

    像这样将 DIV 放在表格行中

    <form action="" method="post">
      <table>
        <tr><td><div style="overflow: auto; width : 200px; height : 50px;">
          {{ form.as_p }}
        </div></td></tr>
        <tr><td colspan="2"><input type="submit" value="Save"/></td></tr>
      </table>
    </form>
    

    【讨论】:

    • 好的,我做到了,虽然应该不是问题,但这并不能解决我的问题。它只是在我的表中添加了一个额外的行并在那里插入了空的 div。它实际上并没有封装 {{ form }}。
    • 如果 DIV 在表格内,它应该在一行中。查看更新。
    • 那行不通,在 django {{form}} 中为每个字段输出 ..。您可以尝试将此解决方案与 {{form.as_ul}} 结合使用
    • 如果这不起作用,你能告诉我输出表单的功能吗?
    • @JamesO,谢谢。我不知道 form 是 form.as_table 的别名
    【解决方案2】:

    这不是一个真正的 django 问题,所以你发布的 python 代码真的没有什么区别。我认为问题是您希望表格有滚动条,但将提交按钮分开?

    您有两个直接的选择。您可以将 {{ form }} 包装在第二个表中,因此您有两个嵌套表。或者,您可以将 div 和 submit 按钮移到表格之外,以便表格被 div 包裹。

    不管怎样,你现在所拥有的都行不通。表标签的任何直接子标签,除了 tbody 或 tr 将被忽略。

    【讨论】:

      猜你喜欢
      相关资源
      最近更新 更多
      热门标签