This was a bit of a tricky one to figure out. The reason being we store our files not in the file system but using MogileFS, which required a custom Storage wrapper.
So our model looks a little something like this.
# other fields
image = models.FileField(storage = MogileFSStorage(), upload_to = 'product_images')
And that's completely fine if we're using the admin to manually upload image files.
However, if we wanted to programmatically save an image using code... Where do we begin?
I'm glad to say that it's actually easier than expected.
from django.core.files import File
from django.core.files.temp import NamedTemporaryFile
product = Product()
# set all your variables here
# Save image
image_url = 'http://whatever.com/image.jpg'
img_temp = NamedTemporaryFile(delete = True)
product.image.save("image_%s" % product.pk, File(img_temp))
And that's it! There's no need to worry about storage stuff because that's handled at the model declaration level.
Of course, how to access the file is completely up to you and out of the scope of this post.