class UserForeignKey(models.ForeignKey):
    def __init__(self, **kwargs):
        kwargs['editable'] = False
        to = 'auth.user'

        super(UserForeignKey, self).__init__(to, **kwargs)

    def pre_save(self, model_instance, add):
        def set_current_user():
            setattr(model_instance, self.name, get_current_user())
            return super(UserForeignKey, self).pre_save(model_instance, add)

        return super(UserForeignKey, self).pre_save(model_instance, add) or set_current_user()