No, it's a very bad method. Consider what happens if two people want
to add fields of the same name; trying to stick them in the User model
will obviously fail and break at least one person's code. Using the
standard method of a related profile model keeps them neatly
namespaced.
As a general rule, consider code in other people's applications
(including applications in django.contrib) to be read-only.
--
"Bureaucrat Conrad, you are technically correct -- the best kind of correct."
Well, there's also the fact that:
1. Using a profile means relying on documented, guaranteed-stable
behavior in Django.
2. Using the add_to_class trick means relying on undocumented
internals which have no stability guarantee whatsoever, and which are
subject to change without warning.
Seriously: there's a documented and supported method for storing
additional information related to users. Please take advantage of it.
(and, really I speak from experience regarding other ways to do this;
I have hacked up Django in just about every way possible, and I
remember back when you could do things like outright replace models
with your own definitions, and all of it was a freaking nightmare for
maintainability)