It's either a bug or behavior that needs more explicit documentation. The problem is that upload_to is called when the field is saved (that is when the form data is copied to the new/changed model instance), and the model is saved field-by-field in (apparently, excepting for id which comes first) the order they are declared in the model. So, since your ImageField is declared before desc, desc has not yet been set in the model instance when upload_to is called. If you switch the order of the fields in the model your upload_to will be able to access the desc that has been entered in the form.
I tend to think it's a bug and file-type fields should be saved after non-file fields, since the doc here:
http://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.FileField.upload_to
only mentions the primary id field as one you cannot rely on in upload_to. But even if I'm wrong about that it deserves a ticket since either the code should be fixed or the doc should mention this behavior.
Karen