Функцию для передачи в 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'))