我在使用django Inlineformsets时遇到问题。我有两个名为Projects和projectFiles的模型,Projects是父模型,而projectFiles是子模型。
models.py
class Projects(models.Model):
project_name = models.CharField(max_length=100)
class projectFiles(models.Model):
projectName = models.ForeignKey('Projects',on_delete=models.CASCADE)
p_file = models.FileField(upload_to='Files',null=True,blank=True)
remark = models.CharField(max_length=500,null=True,blank=True)
我的表单是下面的表单,
projectfilesFormSet = inlineformset_factory(Projects,projectFiles,fields=['p_file','remark'], extra=1,labels={'p_file':'File',},
widgets = {
'p_file' : forms.FileInput(attrs={'class':'form-control-file'}),
'remark' : forms.TextInput(attrs={'class':'form-control'}),
})
我的观点是下面的观点,
def fileUpload(request,pk):
r_project = Projects.objects.get(pk=pk)
if request.method == 'POST':
formset = projectfilesFormSet(request.POST,request.FILES,instance=r_project)
if formset.is_valid():
formset.save()
return redirect('projects:file_upload',pk=r_project.id)
formset = projectfilesFormSet(instance=r_project)
return render(request,'projects/files_upload.html',{'formset':formset})
表单集保存数据,但是我无法看到 p_file 字段的保存值以及其他字段值。现在,如果我检查数据库,则该字段具有值。我无法以某种方式在模板中显示它。 我的模板是
<form class="forms-sample" action="." method="POST" enctype="multipart/form-data">
{% csrf_token %}
{{ formset.management_form }}
{% for form in formset %}
{% for hidden in form.hidden_fields %}
{{ hidden }}
{% endfor %}
{% for field in form.visible_fields %}
<div class="row mt-3">
<div class="col-md-4">{{field.label_tag}}</div>
<div class="col-md-8">{{field}}</div>
</div>
{% endfor %}
<hr>
{% endfor %}
<button type="submit" class="btn btn-primary mr-2">Save</button>
</form>
我的模板丢失了什么。
更新
问题似乎出在我的表单集小部件声明中。删除
'p_file' : forms.FileInput(attrs={'class':'form-control-file'}),
代码中的似乎可以解决此问题。但是表格显然被弄乱了!