1

私の見解:

class HospitalDoctorAddView(CreateView):

template_name = "hospital_doctor_add.html"
form_class = HospitalDoctorInfoForm
model = HospitalDoctor
success_url = "/hospital-profile/"

def get_context_data(self, **kwargs):
    context = super(HospitalDoctorAddView, self).get_context_data(**kwargs)
    context['formset'] = TimingFormSet
    return context

def post(self, request, *args, **kwargs):

    form = self.form_class(request.POST)
    formset = TimingFormSet(request.POST, prefix='timing')
    if form.is_valid() and formset.is_valid():
        self.form_save(form)
        self.formset_save(formset)

    return render(request, self.template_name, {
    'form': HospitalDoctorInfoForm,
    'formset': formset})

def form_save(self, form):
    info = HospitalDoctor()
    info.hospital = self.request.user
    info.full_name = form.cleaned_data['full_name']
    info.expertization = form.cleaned_data['expertization']
    info.nmc_no = form.cleaned_data['nmc_no']
    info.save()

def formset_save(self, form):
    frm = Timing()
    frm.day = form.cleaned_data['day']
    frm.mng_start = form.cleaned_data['mng_start']
    frm.mng_end = form.cleaned_data['mng_end']
    frm.eve_start = form.cleaned_data['eve_start']
    frm.eve_end = form.cleaned_data['eve_end']
    frm.save()

そして私のテンプレートで:

<form method="post" action="">{% csrf_token %}
<p>{{form}}</p>
<p>{{formset.management_form}}</p>
<table>
    {% for form in formset %}
    {{form}}
    {% endfor %}
</table>
<input type="submit" value="Create" />

</form>

通常のフォームとフォームセットを投稿したい。

ここで ValidationError: u'ManagementForm data is missing or has been tampered with' を取得しています。何が悪いのかわからない。助けが必要。

4

1 に答える 1

0

これを試して、何が起こるか見てみましょう:

def get_context_data(self, **kwargs):
    context = super(HospitalDoctorAddView, self).get_context_data(**kwargs)
    if self.request.POST
        context['formset'] = TimingFormSet(self.request.POST, prefix='timing')
    return context

def post(self, request, *args, **kwargs):

    form = self.get_form(self.get_form_class())
    formset = TimingFormSet(request.POST, prefix='timing')
    if form.is_valid() and formset.is_valid():
        self.form_save(form)
        self.formset_save(formset)

    print(self.get_context_data(**kwargs)) # See what is being passed in the context
    return render(request, self.template_name, self.get_context_data(**kwargs))

フォームのクラスの名前を渡す前に、CBV の完全なコンテキストをテンプレートに渡したいとします。

于 2014-11-01T06:16:47.833 に答える