为什么在渲染内联formset工厂时父窗体不显示?

时间:2013-11-05 15:23:39

标签: django

我正在尝试使用基于类的视图来显示有关工具的信息,然后向该视图添加标签,主要是为了自学如何使用inline_formsets。我遇到的问题是如何将子对象的表单注入模板。

问题是孩子的表单集正在出现,但是模板中没有显示父表单。

结果是父表单没有显示 -

enter image description here

最终,这是“我在Django做错了什么?”问题

模型非常简单 - 工具有几个字段定义我的父对象,标签是与之相关的子项:

models.py

 from django.db import models

 class Tool(models.Model):
    content_id = models.CharField(
        primary_key=True,
        help_text="Confluence ID of the tool document",
        max_length=12
    )

    tool_name = models.CharField(
        max_length=64,
        help_text="Short name by which the tool is called",
    )

    purpose = models.TextField(
        help_text="A one sentence summary of the tools reason for use."
    )

    body = models.TextField(
        help_text="The full content of the tool page"
    )

    last_updated_by = models.CharField(
        max_length=64
    )

    last_updated_at = models.DateTimeField()

    def __unicode__(self):
        return u"%s content_id( %s )" % (self.tool_name, self.content_id)

 class ToolTag(models.Model):

    description = models.CharField(
        max_length=32,
        help_text="A tag describing the category of field.  Multiple tags may describe a given tool.",
    )

    tool = models.ForeignKey(Tool)

    def __unicode__(self):
        return u"%s describes %s" % (self.description, self.tool)

我正在使用标准的基于类的表单:

forms.py

from django.http import HttpResponseRedirect
from django.views.generic import CreateView
from django.views.generic import DetailView, UpdateView, ListView
from django.shortcuts import render

from .forms import ToolForm, TagsFormSet
from .models import Tool

TagsFormSet = inlineformset_factory(Tool, ToolTag, can_delete='True')

class ToolUpdateView(UpdateView):
    template_name = 'tools/tool_update.html'
    model = Tool
    form_class = ToolForm
    success_url = 'inventory/'

views.py

def call_update_view(request, pk):
    form = ToolUpdateView.as_view()(request,pk=pk)
    tag_form = TagsFormSet()
    return render(  request, "tools/tool_update.html", 
                    {
                        'form': form,
                        'tag_form': tag_form,
                        'action': "Create"
                    }
    )

我的模板如下:

tool_update.html

{% block content %}

<form action="/update/" method="post">
    {% csrf_token %}

    <DIV>
        Tool Form:
        {{ form.as_p }}
    </DIV>

    <DIV>
        Tag Form:
        {{ tag_form.as_p }}
    </DIV>
    <input type="submit" value="Submit" />
</form>

{% endblock %}

1 个答案:

答案 0 :(得分:1)

这一行:

form = ToolUpdateView.as_view()(request,pk=pk)

毫无意义。视图不是表单,您不能将其用作表单。你应该做form = ToolForm()。虽然请注意,您还需要一些代码来处理表单提交本身,来自request.POST数据。