Reputation: 11794
I have 2 questions regarding proxy from model,
For example, assume we have defined:
from django.contrib.auth.models import User
class MyProxyUser(User):
class Meta:
proxy = True
def say_hello(self):
return "Hello, {}".format(self.get_full_name())
One way to convert successfully is by re-querying the object, which is unnecessary.
# Retrieve from model Object.
# Assume: request is HttpRequest from authenticated user.
my_user = MyProxyUser.objects.get(pk=request.user.pk) # Hit Database
my_user.say_hello()
# Retrieve from model QuerySet.
# Assume: users = User.objects.all()
MyProxyUser.objects.filter(pk__in=users)
Upvotes: 3
Views: 6891
Reputation: 7719
You just need to assign the model attribute of your queryset
users = User.objects.all()
users.model = MyProxyUser
users.first().say_hello()
Edit: For assigning proxy class to a django model object, try
user = User.objects.all()
user.__class__ = MyProxyUser
Upvotes: 4
Reputation: 676
Adding to Ramast's answer, you can also build a function on your proxy model class to consistently do this for you:
class MyProxyUser(User):
...
@staticmethod
def from_user(user: UserManager):
""" Get a PAUser classed instance from a User object.
Useful for Signals and other Django defaults that send base User objects.
"""
user.model = PAUser
return user
...
Upvotes: 0