On Oct 26, 4:29 pm, Scott Gould <zinck...@gmail.com> wrote:
> Hi folks,
>
> I've got all my file uploads (that go to S3 as it happens, but I don't
> think that's overly important) taking their path from one upload_to
> delegate:
>
> def get_upload_path(instance, filename=None):
>         """
>         Defaults to appname/modelname/uuid.
>         """
>         return "%s/%s/%s" % (
>                 instance.__class__._meta.app_label,
>                 instance.__class__.__name__.lower(),
>                 instance.uuid)
>
> That's obviously predicated on a field called "uuid" on any model that
> uses this method for calculating the upload path. This works fine, but
> I now want to deploy the same system on models with multiple
> FieldFields. The way I'd like to extend this is by appending the field
> name onto the existing file structure:
>
> def get_upload_path(instance, filename=None):
>         return "%s/%s/%s/%s" % (
>                 instance.__class__._meta.app_label,
>                 instance.__class__.__name__.lower(),
>                 instance.uuid,
>                 APPROPRIATE_FIELD_NAME_HERE)
>
> Which should result in something like "myapp/mymodel/<obj.uuid>/
> pdf_file" and "myapp/mymodel/<obj.uuid>/thumbnail_image" given this
> model:
>
> class MyModel(models.Model):
>         pdf_file = FileField(upload_to=get_upload_path)
>         thumbnail_image = FileField(upload_to=get_upload_path)
>
> Any ideas how I can get that field name inside the upload_to function?
> Thanks!

One idea would be to put 'fieldname' as the first parameter to the
function, then use functools.partial [1] to create partial functions
for each file field with the value set appropriately:

        thumbnail_image = FileField(upload_to=partial(get_upload_path,
'thumbnail_image'))

[1]: http://docs.python.org/library/functools.html#functools.partial
--
DR.

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-us...@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to