Home > database >  how to add form as data in class-base views?
how to add form as data in class-base views?

Time:01-05

I used to send form as content in function-base-view and I could use for loop to simply write down fields and values like:

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

I don't remember whole the way so maybe I wrote it wrong but is there anyway to do this with class-based-views, because when I have many fields its really hard to write them 1by1

CodePudding user response:

Not entirely sure if this is what you need. But still I will try to answer. I took an example with class AuthorDetail(FormMixin, DetailView) as a basis. In get_context_data saved the form itself. In the template, first I displayed the form, then the value from the bbs model and requested form.message.label_tag. To get the tag, I looked at this documentation.

In the class, replace the Rubric model with your own. In the template path: bboard/templ.html replace bboard with the name of your application where your templates are located.

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()

templates

<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'),
]
  • Related