Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.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 DJANGO如何在一个表单标记中处理两个表单_Python_Django_Django Forms_Django Templates_Django Views - Fatal编程技术网

Python DJANGO如何在一个表单标记中处理两个表单

Python DJANGO如何在一个表单标记中处理两个表单,python,django,django-forms,django-templates,django-views,Python,Django,Django Forms,Django Templates,Django Views,我有两个表单Postform和Fileform,我将两个表单放在一个标签中。但当我按下提交按钮时,什么也没发生。我还使文件字段不是必需的,但它仍然不工作。但当我给这两种形式的输入时,它才起作用。 我想,如果文件不存在,它应该工作,只是保存后的形式 form.py views.py: 模板: {%csrf_令牌%} {{form.as_p}} 文件上传 {{fileform.file} 提交 提前谢谢 是否有充分的理由不向Post类添加文件字段?您可以将该字段设置为非必需字段。是否有充分的理由

我有两个表单Postform和Fileform,我将两个表单放在一个标签中。但当我按下提交按钮时,什么也没发生。我还使文件字段不是必需的,但它仍然不工作。但当我给这两种形式的输入时,它才起作用。 我想,如果文件不存在,它应该工作,只是保存后的形式

form.py

views.py:

模板:


{%csrf_令牌%}
{{form.as_p}}
文件上传
{{fileform.file}
提交

提前谢谢

是否有充分的理由不向Post类添加文件字段?您可以将该字段设置为非必需字段。是否有充分的理由不向Post类添加文件字段?您可以使该字段不是必需的。
class PostForm(forms.ModelForm):
    choice = (
        ('post','post'),
        ('anouncement','anouncement'),
        ('question', 'question')
        )
    title = forms.CharField(widget=forms.TextInput(attrs={'class':'mdl-textfield__input','id':'s1'}))
    content = forms.CharField(widget=forms.Textarea(attrs={'class':'mdl-textfield__input','id':'sample5','rows':'3'}))
    post_type = forms.ChoiceField(choices = choice, widget = forms.Select(attrs={'class':'mdl-selectfield__select', 'id':'post_type'}))
    class Meta:
        model = Post
        fields = [
            "title",
            "content",
            "post_type",

        ]

class FileForm(forms.ModelForm):
    file = forms.FileField(widget=forms.ClearableFileInput(attrs={'multiple': True,'class':'none','id':'file_input_file','required':'False'}), required = False )
    class Meta:
        model = file
        fields = [
            "file"
        ]
    def __init__(self, *args, **kwargs):
        # first call parent's constructor
        super(FileForm, self).__init__(*args, **kwargs)
        # there's a `fields` property now
        self.fields['file'].required = False
    form = PostForm(request.POST or None)
    fileForm = FileForm(request.POST or None, request.FILES or None) 
    context.update({'form':form, 'fileform':fileForm})
    print(fileForm.is_valid())
    if form.is_valid() and fileForm.is_valid():
        instance = form.save(commit=False)
        instance.user = request.user
        slug = create_slug(instance)
        instance.slug = slug
        instance.save()
        print(request.FILES)
        if request.FILES :
            for f in request.FILES.getlist('file'):
                print(f)
                file.objects.create(Post = instance, file=f)
        return HttpResponseRedirect('/%s/post/%s/'%(request.user.username,slug))
<form enctype="multipart/form-data" action="" method="POST">
                        {% csrf_token %}
                        {{ form.as_p }}
                        <span style="display: inline-flex;">
                            <div class="file_input_div">
                                <div class="file_input">
                                    <label class="image_input_button mdl-button mdl-js-button mdl-button--fab mdl-button--mini-fab mdl-js-ripple-effect mdl-button--colored">
                                        <i class="material-icons">file_upload</i>
                                        {{ fileform.file}}
                                    </label>
                                </div>
                                <div id="file_input_text_div" class="mdl-textfield mdl-js-textfield textfield-demo">
                                    <input class="file_input_text mdl-textfield__input" type="text" disabled readonly id="file_input_text" />
                                    <label class="mdl-textfield__label" for="file_input_text"></label>
                                </div>
                            </div>
                            <div class="mdl-layout-spacer"></div>
                            <div class="mdl-layout-spacer"></div>
                            <button class="mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect mdl-button--colored align-right" name="submit" type="submit">submit</button>
                        </span>
                    </form>