I can't write the tests now, but I think one should wrap on try if there is something like ```.get()```, that rises an exception if it can't find anything.

If you are using ```filter()```, it will always return something, so one should discuss about the returned value (that's the ```if len()```).

The amount of queries are the same, when you call ```[0]```, the queryset gets evaluated, so it is when you call ```values_list()```. Then the ```parent``` query gets executed when ```update()``` is called (I think).

It's a matter of preferences, whatever works best for you