django 如何在基于类视图中将窗体添加为数据?

92dk7w1h  于 2023-01-06  发布在  Go
关注(0)|答案(1)|浏览(121)

我过去常常将表单作为function-base-view中的内容发送,我可以使用for loop简单地写下字段和值,如:

{% for x in field %}
   <p>{{ x.label_tag }} : {{ x.value }} </p>

我不记得整个过程,所以可能我写错了,但是否可以使用class-based-views执行此操作,因为当我有许多字段时,很难逐个写入它们

xfb7svmp

xfb7svmp1#

不完全确定这是否是你所需要的。但我仍然会尝试回答。我举了一个例子,类AuthorDetail(FormMixin,DetailView)作为基础。在get_context_data中保存了表单本身。在模板中,我首先显示了表单,然后显示了来自bbs模型的值和所请求的表单。message.label_tag。为了获得标记,我查看了这个documentation
在类中,将Rubric模型替换为您自己的模型。在模板路径中:bboard/templ.html将bboard替换为模板所在的application的名称。
views.py

class Dw(FormMixin, DetailView):
    model = Rubric
    template_name = 'bboard/templ.html'
    form_class = TestForm
    context_object_name = 'bbs'

    def get_context_data(self, **kwargs):
        context = super(Dw, self).get_context_data(**kwargs)
        context['form'] = self.get_form()
        print(77777, context['form']['message'].label_tag())

        return context

    def post(self, request, *args, **kwargs):
        self.object = self.get_object()
        form = self.get_form()
        if form.is_valid():
            return self.form_valid(form)
        else:
            return self.form_invalid(form)

forms.py

class TestForm(forms.Form):
    message = forms.CharField()

模板

<form method="post">
      {% csrf_token %}
      {{ form.as_p }}
      <input type="submit" value="adding">
</form>

<h2>{{ bbs }}</h2>
<h2>{{ form.message.label_tag }}</h2>

urls.py

urlpatterns = [
  path('<int:pk>/', Dw.as_view(), name='aaa'),
]

相关问题