Reputation:
I've been following the tutorial for 'File Upload With Model Forms' here: https://simpleisbetterthancomplex.com/tutorial/2016/08/01/how-to-upload-files-with-django.html
I'm pretty sure I followed it to the letter (except using my own project). However I'm getting the error
The view myproject.views.InspectionReportForm_Create didn't return an HttpResponse object. It returned None instead.
Here is my code:
models.py:
class Inspection(models.Model):
InspectionID = models.AutoField(primary_key=True, unique=True)
PartID = models.ForeignKey('Part', on_delete=models.CASCADE, null=True)
@classmethod
def create(cls, partid):
inspection = cls(PartID = partid)
return inspection
class InspectionReport(models.Model):
ReportID = models.AutoField(primary_key=True, unique=True)
InspectionID = models.ForeignKey('Inspection', on_delete=models.CASCADE, null=True)
Date = models.DateField(auto_now=False, auto_now_add=False, null=True)
Comment = models.CharField(max_length=255, blank=True)
FileName = models.CharField(max_length=255, blank=True)
Report = models.FileField(upload_to='docs', null=True, blank=True)
Signature = models.CharField(max_length=255, blank=True)
@classmethod
def create(cls, inspid, date, comment, rept, sig):
inspreport = cls(InspectionID = inspid, Date = date, Comment = comment, Report = rept, Signature = sig)
return inspreport
forms.py:
class InspectionReportForm(forms.ModelForm):
class Meta:
model = InspectionReport
fields = ('InspectionID', 'Date', 'Comment', 'Report', 'Signature')
views.py:
def InspectionReportForm_Create(request):
if request.method == 'POST':
form = InspectionReportForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return redirect('sites/1')
else:
form = InspectionReportForm()
return render(request, 'moorings/uploadReport.html', {'form': form })
uploadReport.html (just the form. everything else is styling and titles etc):
<div id="wrapper" class="dark">
<div id="loginwrapper" class="dark">
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Create</button>
</form>
</div>
</div>
The misfitting div name on the form wrapper is just because I reused the layout from my login page which used a similar form.
EDIT: One thing that might be the issue... the tutorial doesn't say anything about urls.py. So I added this in, which may or may not be correct:
urls.py:
urlpatterns = [
path('', views.index, name='index'),
path('sites/<int:site>', views.sites, name='sites'),
path('parts/<int:part>', views.parts, name='parts'),
path('signup/', views.signup, name = 'signup'),
path('uploadReport/', views.InspectionReportForm_Create, name = 'CreateReport')
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Upvotes: 1
Views: 582
Reputation:
Change
def InspectionReportForm_Create(request):
if request.method == 'POST':
form = InspectionReportForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return redirect('sites/1')
else:
form = InspectionReportForm()
return render(request, 'moorings/uploadReport.html', {'form': form })
to
def InspectionReportForm_Create(request):
if request.method == 'POST':
form = InspectionReportForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return redirect('sites/1')
else:
form = InspectionReportForm()
return render(request, 'moorings/uploadReport.html', {'form': form })
Upvotes: 2