Метапрограммирование в python
Функцию для передачи в upload_to можно не задавать явно, а генерировать другой функцией, примерно так же, как работают декораторы. Получится что-то типа:
def get_upload_to(prefix):
def _tmp(instance, filename):
return os.path.join(instance.pk, prefix, filename)
return _tmp
avatar = models.FileField(upload_to=get_upload_to('avatars'))