Regarding aliased columns of relationships
Peewee puts stuff on the model it belongs to. You're just aliasing the author's first-name, so peewee puts that on the author model. When you have an expression where it is unclear what model it belongs to, then it gets placed on the root/selected model.

If you don't want to be dealing with a graph of models, just use `.objects()` at the end of your query and *all* attributes will be placed on the root/selected model.
I have the following models

```python
class Author(BaseModel):
    first_name = CharField()
    surname = CharField()

    class Meta:
        table_name = 'author'

class Book(BaseModel):
    author = ForeignKeyField(column_name='author_id', field='id', model=Author)
    isbn = CharField(null=True, unique=True)
    title = CharField()

    class Meta:
        table_name = 'book'

class Review(BaseModel):
    book = ForeignKeyField(column_name='book_id', field='id', model=Book)
    content = CharField(null=True)
    rating = IntegerField(null=True)
    reviewer_name = CharField(null=True)

    class Meta:
        table_name = 'review'
```

And I perform the following query

```python
name = Review.book.author.first_name.alias('name')
res = Review.select(name).join(Book).join(Author).where(
    (Review.rating >= 2) & (Author.first_name <= Value('Z')))
for r in res:
    print(r.name)
```

this gives me the following error

```
Traceback (most recent call last):
  File "test.py", line 10, in <module>
    print(r.name)
AttributeError: 'Review' object has no attribute 'name'
```

To make the code above to work, I have to print `r.book.author.name`.
When I create compound aliased column (e.g., (`Review.book.author.first_name + Review.book.title).alias('name')`), the result set *does* contain the property `name` as expected.

For example, this query works

```python
name = (Review.book.author.first_name + Review.book.title).alias('name')
res = Review.select(name).join(Book).join(Author).where(
    (Review.rating >= 2) & (Author.first_name <= Value('Z')))
for r in res:
    print(r.name)
```

I don't know if this is a feature or bug, but I find it counter-intuitive. I would expect peewee to store all aliased columns to the object of the result set, i.e., I would like to make an alias on the namespace of the final result set. Am I missing something here?