Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将表单集保存在UpdateView中_Python_Django_Django Forms_Django Views_Django Generic Views - Fatal编程技术网

Python 将表单集保存在UpdateView中

Python 将表单集保存在UpdateView中,python,django,django-forms,django-views,django-generic-views,Python,Django,Django Forms,Django Views,Django Generic Views,我有下面具有多对多关系的模型条目和含义。我需要创建一个更新表单/视图,以同时编辑条目和含义对象。我还必须能够在编辑条目时向对象添加更多含义对象。 我尝试使用UpdateView和modelformset\u factory如下 我可以看到表单,但是我的视图没有保存意思是更改。我有两个问题: 如何保存意思是更改 如何在此表单/视图中添加或删除意思为的对象 模型 形式 看法 模板 #edit.html {%csrf_令牌%} {{form.as_table}} {{means_formset.man

我有下面具有多对多关系的模型
条目
含义
。我需要创建一个更新表单/视图,以同时编辑
条目
含义
对象。我还必须能够在编辑
条目时向
对象添加更多
含义
对象。 我尝试使用
UpdateView
modelformset\u factory
如下

我可以看到表单,但是我的视图没有保存
意思是
更改。我有两个问题:

  • 如何保存
    意思是
    更改

  • 如何在此表单/视图中添加或删除
    意思为
    的对象

  • 模型 形式 看法 模板
    #edit.html
    {%csrf_令牌%}
    {{form.as_table}}
    {{means_formset.management_form}
    {meansion\u formset%中的meansion\u form的百分比}
    {{意思是{u form.as{u p}}
    
    {%endfor%}
    我解决了将
    post
    方法添加到
    EntryUpdateView
    类中的问题:

    def post(self, request, *args, **kwargs):
        self.object = self.get_object()
        form_class = self.get_form_class()
        form = self.get_form(form_class)
        qs = models.Meaning.objects.filter(entry=self.get_object())
        formsets = forms.MeaningFormSet(self.request.POST, queryset=qs)
    
        if form.is_valid():
            for fs in formsets:
                if fs.is_valid():
                    fs.save()
            return self.form_valid(form)
        return self.form_invalid(form)
    

    我解决了将
    post
    方法添加到
    EntryUpdateView
    类中的问题:

    def post(self, request, *args, **kwargs):
        self.object = self.get_object()
        form_class = self.get_form_class()
        form = self.get_form(form_class)
        qs = models.Meaning.objects.filter(entry=self.get_object())
        formsets = forms.MeaningFormSet(self.request.POST, queryset=qs)
    
        if form.is_valid():
            for fs in formsets:
                if fs.is_valid():
                    fs.save()
            return self.form_valid(form)
        return self.form_invalid(form)
    
    class EntryUpdateView(UpdateView):
        model = models.Entry
        form_class = forms.EntryForm
        formset_class = forms.MeaningFormSet
        template_name = 'edit.html'
    
        def get_context_data(self, **kwargs):
            context = super(EntryUpdateView, self).get_context_data(**kwargs)
            qs = models.Meaning.objects.filter(entry=self.get_object())
            formset = forms.MeaningFormSet(queryset=qs)
            context['meaning_formset'] = formset
            return context
    
    # edit.html
    <form action="" method="post">
        {% csrf_token %}
        {{ form.as_table }}
    
        {{ meaning_formset.management_form }}
        {% for meaning_form in meaning_formset %}
            {{ meaning_form.as_p }}
            <hr>
        {% endfor %}
    
        <input type="submit" value="Update"/>
    </form>
    
    def post(self, request, *args, **kwargs):
        self.object = self.get_object()
        form_class = self.get_form_class()
        form = self.get_form(form_class)
        qs = models.Meaning.objects.filter(entry=self.get_object())
        formsets = forms.MeaningFormSet(self.request.POST, queryset=qs)
    
        if form.is_valid():
            for fs in formsets:
                if fs.is_valid():
                    fs.save()
            return self.form_valid(form)
        return self.form_invalid(form)