【问题标题】:django 'ManagementForm data is missing or has been tampered withdjango 'ManagementForm 数据丢失或被篡改
【发布时间】:2014-12-28 11:26:01
【问题描述】:

我的看法:

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'。我不知道怎么了。需要帮助。

【问题讨论】:

  • 你能多发一些你的观点吗?如果您的视图只是一个函数,那么它就没有属性/方法可以通过 self 访问
  • 我正在使用 createview 并且错误显示在 if form.is_valid() 和 formset.is_valid()
  • 我添加了我的观点

标签: django formsets


【解决方案1】:

试试这个,看看会发生什么:

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 的完整上下文传递给模板,而之前您只是传递表单类的名称。

【讨论】:

  • 尝试将模板从{{ form }}更改为{{ form.as_p }} 并在post方法中打印出上下文以查看上下文中的内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-09
  • 2022-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多