I'm making an Image posting form with thes fields: Title, Description, Image file, and a public or not boolean. The issue I have is that it does nothing. It seems to post as I can see it in the dev server console, but then nothing, no image in media/photos, nothing in the database either... Weird thing is that when I create an Image object from the django admin page, It works perfectly fine. So it must be in the view or template, but I may be wrong. Here's the code:
<!--The template-->
{% if user.is_authenticated %}
<h1>Ajouter une image</h1>
<h2>Deconnexion:</h2><a href="/Gallery/Disconnect/">Ici</a>
<p>
<form method="post" enctype="multipart/form-data" action=".">
{% csrf_token %}
<p><label for="id_titre">Titre:</label>
<input id="id_titre" type="text" name="Titre" maxlength="100" /></p>
<p><label for="id_description">Description:</label>
<textarea name="Description" id="id_description" ></textarea></p>
<p><label for="id_i">Image:</label>
<input type="file" name="Image" id="id_i" /></p>
<p><label for="id_public"><input type="checkbox" name="public" id="id_public"/>Public <!-- Attention, Internet est un lieu public, meme si cette case n'est pas cochée, votre image devient publique une fois postée. elle ne sera cependant pas affichée dans la gallerie aleatoire ou dernieres images. -->
</label></p>
<input type="submit"/>
</form>
</p>
{% if sauvegarde %}
<p>Image saved.</p>
{% endif %}
{% else %}
<h1>Connect</h1>
{% if error %}
<p><strong>wrong password, or user does not exist, sorry</strong></p>
{% endif %}
<form method="post" action=".">
{% csrf_token %}
<p><label for="id_username">Username:</label>
<input id="id_username" type="text" name="username" maxlength="30" /></p>
<p><label for="id_password">Password:</label>
<input id="id_password" type="password" name="password" maxlength="30" /></p>
<input type="submit"/>
</form><h1>Or Register <a href="/Gallery/Register/">here</a></h1>
{% endif %}
The View:
#The view
def Publish(request):
reg = False
sauvegarde = False
if request.user.is_authenticated():
if request.method == "POST":
form = ImagePublish(request.POST, request.FILES)
if form.is_valid():
pic = Image()
pic.titre = form.cleaned_data["titre"]
pic.description = form.cleaned_data["description"]
pic.i = form.cleaned_data["i"]
pic.public = form.cleaned_data["public"]
pic.save()
sauvegarde = True
else:
form = ImagePublish(request.POST, request.FILES)
else :
if request.method == "POST":
form = ConnexionForm(request.POST)
if form.is_valid():
username = form.cleaned_data["username"] # Nous récupérons le nom d'utilisateur
password = form.cleaned_data["password"] # … et le mot de passe
user = authenticate(username=username, password=password) #Nous vérifions si les données sont correctes
if user: # Si l'objet renvoyé n'est pas None
login(request, user) # nous connectons l'utilisateur
else: #sinon une erreur sera affichée
error = True
else:
form = ConnexionForm()
return render(request, 'Publier.html',locals())
The form:
#The form
class ImagePublish(forms.Form):
titre = forms.CharField(max_length=100)
description = forms.CharField(widget=forms.Textarea)
def clean_content(self):
if content != None:
content = self.cleaned_data['content']
content_type = content.content_type.split('/')[0]
if content_type in settings.CONTENT_TYPES:
if content._size > int(settings.MAX_UPLOAD_SIZE):
raise forms.ValidationError(_(u'Please keep filesize under %s. Current filesize %s') % (filesizeformat(settings.MAX_UPLOAD_SIZE), filesizeformat(content._size)))
else:
raise forms.ValidationError(_(u'File type is not supported'))
return content
public = forms.BooleanField(required=False)
That's it, I can add any other part of the code you need and everything is imported, also I would like to point the fact that I got no error, and the message I set to say like "cool, Image uploaded" doesn't show up, If that can show anyone the good direction...