Если вы действительно хотите, чтобы полный прокси-объект был доступен, это быстрое и грязное решение (за счет дополнительного вызова базы данных)
class MyUser(User):
def pretty_username(self):
if self.first_name:
return self.first_name
return self.username
class Meta:
proxy = True
def get_myuser(self):
try:
return MyUser.objects.get(pk=self.pk)
except MyUser.DoesNotExist:
return None
User.add_to_class('get_myuser', get_myuser)
Таким образом, чтобы использовать это в представлении, вы можетескажем:
request.user.get_myuser().pretty_username()
Или в шаблоне:
{{ request.user.get_myuser.pretty_username }}
Лучшее решение, если вы не привязаны к идее модели прокси, будет следующим:
def pretty_username(self):
if self.first_name:
return self.first_name
return self.username
User.add_to_class('pretty_username', pretty_username)
Это позволило бы следующее:
request.user.pretty_username()
Или
{{ request.user.pretty_username }}