Python DJANGO如何在一个表单标记中处理两个表单
我有两个表单Postform和Fileform,我将两个表单放在一个标签中。但当我按下提交按钮时,什么也没发生。我还使文件字段不是必需的,但它仍然不工作。但当我给这两种形式的输入时,它才起作用。 我想,如果文件不存在,它应该工作,只是保存后的形式 form.py views.py: 模板: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类添加文件字段?您可以将该字段设置为非必需字段。是否有充分的理由
{%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>