I just can't figure out how to upload images in django. I've read dozens of blog posts and questions here, but most of them just confuse me more.
Here is what I have so far. This is my model:
class Post(models.Model):
user = models.ForeignKey(User)
screenshot = models.ImageField(null=True, upload_to="images")
date = models.DateTimeField("date posted", auto_now=True)
text = models.TextField()
Here is the form that I use:
class PostForm(forms.Form):
text = forms.CharField(
widget = forms.Textarea(attrs = {'cols': 40, 'rows': 10}), required=True)
screenshot = forms.ImageField(required=False)
And here is how I currently process the form:
if request.method == 'POST':
form = PostForm(request.POST, request.FILES)
if form.is_valid():
post = Post(
user = request.user,
text=form.cleaned_data['text'],
screenshot=form.cleaned_data['screenshot']
)
post.save()
But this doesn't work, the file is not uploaded to the server. According to the documentation on file uploads, I have to write my own handle_uploaded_file function, but that page doesn't explain:
- How do I figure out where to save the uploaded file?
- How do I spread files over multiple directories?
- How do I prevent two files with the same name to overwrite each other?
- What value do I assign to the ImageField of my model?
That seems like those problems have already been solved a thousand times...