Reputation: 556
I am a bit new to django. Im trying to send a file over to another server once it is chosen in upload, but is form.is_valid()
always return false would not let me enter if
views.py
-
def sent(request):
if request.method == 'POST':
form = SendFileForm(request.POST, request.FILES)
print "form is made"
print form.errors
if form.is_valid():
print "form is valid"
new_song = Song(songfile= request.FILES['songfile'])
new_song.save()
print "new song is made and saved"
l = List()
#cd = form.cleaned_data
#SENDS THE FILE TO SERVER GIVEN PATH
l.all_files(new_song.songfile.path)
return HttpResponseRedirect(reverse('get_files.views.sent'))
else:
print "form is not valid"
else:
form = SendFileForm()
songs = Song.objects.all()
return render_to_response('sent.html', {'songs': songs,'form': form}, context_instance=RequestContext(request))
sent.html
template-
{% if form.errors %}
<p style="color: red;">
Please correct the error{{ form.errors|pluralize }} below.
</p>
{% endif %}
<form action={% url "sent" %} method="post" enctype="multipart/form-data">
{% csrf_token %}
<p>{{ form.non_field_errors }}</p>
<p>{{ form.songfile.label_tag }} {{ form.songfile.help_text }}</p>
<p>
<!--{{ form.songfile.errors }}-->
{{ form.songfile }}
</p>
<p><input type="submit" value="Upload" /></p>
</form>
forms.py
-
class SendFileForm(forms.Form):
path = forms.CharField()
songfile = forms.FileField(label='Select a music file',help_text='max. 4 megabytes')
I have searched up many forums and not able to solve the problem. Thank you in advance!
Upvotes: 11
Views: 33203
Reputation: 524
In addition to laxmikant's answer, one more way to debug is get the errors like below,
class YourFormView(generic.edit.CreateView):
def post(self, request, *args, **kwargs):
form = YourForm(request.POST)
print(form.errors)
Note: This is only debugging technique
Upvotes: 0
Reputation: 2216
Note:- This answer is Only to help you in debugging the code.
You can print form errors in your views directly.
class YourFormView(generic.edit.CreateView):
def post(self, request, *args, **kwargs):
form = YourForm(request.POST)
for field in form:
print("Field Error:", field.name, field.errors)
Upvotes: 14
Reputation: 9097
The problem is that there is no path
input in your template. Your request.POST
contains incomplete data thats why your form is not valid.
This is missing in your template:
{{ form.path }}
Upvotes: 1
Reputation: 22561
Every field in form are required by default (required=True
). Form submitted without information in required field is not valid. You can add path
field to your form in template and it must be filled or you can make path not required:
class SendFileForm(forms.Form):
path = forms.CharField(required=False)
...
or
<form action={% url "sent" %} method="post" enctype="multipart/form-data">
...
{{ form.songfile }}
{{ form.path }}
...
</form>
Upvotes: 7