Django - Filtering with default I have a method visible on a QuerySet class which should return all articles an user can see. If the user is not logged in, all articles with min_age should'nt be visible, otherwise, if the user is logged in, all articles which min_age is lower than the user's age should be visible. I wrote this code but I think it can be improved. These raise AttributeError aren't good practice, I know, but how can I improve it?

    def visible(self, request=None):
        articles = self.filter(hidden=False)

        try:
            if request is not None:
                if request.user.is_authenticated:
                    if request.user.userprofile.has_filled_out:
                        articles = articles.filter(min_age__lte=request.user.userprofile.age)
                    else:
                        raise AttributeError
                else:
                    raise AttributeError
            else:
                raise AttributeError
        except AttributeError:
            articles = articles.filter(min_age=None)

        return articles
Just put all those conditions into single IF using AND/OR. return limited queryset in ELSE branch.