【问题标题】:displaying other form inside DetailView in django在 django 的 DetailView 中显示其他表单
【发布时间】:2017-12-12 15:12:04
【问题描述】:

我在views.py中有“部分”的详细视图

class part_detail_view(DetailView):
    model = part_list
    context_object_name = 'part_detail'
    template_name = 'part_detail.html'

    def get_context_data(self, **kwargs):
        context = super(part_detail_view, self).get_context_data(**kwargs)
        context['my_list'] = populate_nav_bar()
        return context

但在此 URL 中,我还想显示库存模型的另一个表单“CreateView”,以便在同一页面中我可以显示添加零件库存和添加库存的表单。这在基于函数的视图中很容易完成,但我不确定如何在基于类的视图中执行此操作。

【问题讨论】:

    标签: django


    【解决方案1】:

    您必须在 forms.py 中明确创建表单:

    # forms.py
    class ParForm(forms.ModelForm):
        class Meta:
            model = Part  # Your Part model
            fields = '__all__'
    

    然后只需将表单注入到get_context_data() 的上下文中:

    # views.py
    class PartDetailView(DetailView):
        ...
        
        def get_context_data(self, **kwargs):
            context = super().get_context_data(**kwargs)
            context['part_form'] = PartForm()  # Your part form
            return context
    

    然后在模板中渲染表单:

    ...
    <form method="post" action="{% url 'create_part' %}">
        {{ part_form }}
        <button type="submit">Submit</button>
    </form>
    ...
    

    create_part 是您的 CreateView 的网址。

    【讨论】:

    • 不创建视图从模型创建自己的表单?我没有在创建视图中传递任何表单
    • 在 CreateView 中,Django 隐式注入默认表单为context['form']。但不适用于 DetailView,因此您必须明确编写表单并将其添加到上下文中,请参阅更新的答案。
    • 在id字段中,它显示了所有的父元素如何预先填充到一个id并隐藏它?
    • 要创建隐藏字段,请将 widgets = {'id': forms.HiddenInput()} 添加到 Meta 类。但是Django默认是这样做的,我不明白你是怎么让它不隐藏的。
    • 我说的是要预填充的父元素的id
    猜你喜欢
    • 1970-01-01
    • 2016-10-24
    • 2020-04-30
    • 2013-02-13
    • 2014-07-27
    • 2020-06-01
    • 2018-01-21
    • 2013-04-10
    • 2018-10-21
    相关资源
    最近更新 更多