加载多个模型表单时,“ ManagementForm数据丢失或已被篡改”错误 [英] 'ManagementForm data is missing or has been tampered with' error when loading multiple model forms django

查看:158
本文介绍了加载多个模型表单时,“ ManagementForm数据丢失或已被篡改”错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

views.py

@login_required(login_url='/account/login/')
def TaskCreateView(request,pk,todo_id):
    if not request.user.is_authenticated:
       return redirect('accounts:index')
    else:
       instance = get_object_or_404(Level, pk=pk)
       qs = instance.todo_set.get(id = todo_id)

    todo = Task.objects.filter(todo=qs, student=request.user)
    if todo.exists():
       messages.warning(request, 'You Already Completed This Task')
       return HttpResponseRedirect(instance.get_absolute_url())
    form = StudentTaskForm(request.POST or None, request.FILES or None)

    if form.is_valid():
        form.instance.user = User.objects.get(id=request.user.id)
        obj = form.save(commit=False)
        obj.student = request.user
        obj.todo = qs
        obj.level = instance
        obj.save()

    ImageFormSet = modelformset_factory(Images,
                                        form=ImageForm, extra=3)
    formset = ImageFormSet(request.POST, request.FILES,
                           queryset=Images.objects.none())
    if request.method == 'POST':
        if formset.is_valid():
            for form in formset.cleaned_data:
                image = form['image']
                photo = Images(post=form, image=image)
                photo.save()

            return redirect('student:dashboard')

    return render(request,'task_form.html', 
    {'form':form,"qs":qs,'formset':formset})

forms.py

class StudentTaskForm(forms.ModelForm):
    title = forms.CharField(widget=forms.TextInput(attrs={'class': 
    'form-control',' type': "text",'placeholder':'Enter Title'}))
    content = forms.CharField(widget=SummernoteWidget())


    class Meta:
        model = Task
        fields = [
            'title',
            'content',
        ]
        widgets = {
            'content': SummernoteWidget(),
        }

class ImageForm(forms.ModelForm):
    image = forms.ImageField(label='Image')
    class Meta:
        model = Images
        fields = ('image', )

我有两个模型Task和Images,并且我使用两种形式相同。
我试图为同一图片实施多个图片上传。尝试加载表单时,遇到此错误。我在模板中添加了 {{formset.management_form}} 。图像模型具有任务的外键。

I have two models Task and Images and I'm using two forms for the same. Im trying to implement multiple image upload for the same. When I try to load the form I'm encountering this error. I have added the {{ formset.management_form }} in the template. The images model has a foreign key to the Task.

模板:

<form id="post_form" action="" method="post" 
     enctype="multipart/form-data">
      {% csrf_token %}
    {% for hidden in form.hidden_fields %}
      {{ hidden }}
     {% endfor %}

  {% for field in form %}
    {{ field }} <br />
   {% endfor %}


{{ formset.management_form }}
{% for form in formset %}

    {{ form }}
  {% endfor %}
  <div class="panel-body">
  <button type="submit" class="btn btn-primary m-t-10">Submit</button>
 </div>
</form>


推荐答案

您只能使用<$ c $实例化表单集c> request.POST 用于POST请求。

You should only instantiate the formset with request.POST for POST requests.

if request.method == 'POST':
    formset = ImageFormSet(request.POST, request.FILES,
                           queryset=Images.objects.none())
    ...
else:
    # GET request
    formset = ImageFormSet(queryset=Images.objects.none())
...

这篇关于加载多个模型表单时,“ ManagementForm数据丢失或已被篡改”错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆