Python 具有Django多态性的Django自定义用户模型
当我试图通过Python 具有Django多态性的Django自定义用户模型,python,django,Python,Django,当我试图通过user=request.user获取正确的模型名称时,我遇到了一些问题,它会显示每个用户喜欢的用户,即使是学生。 好的,这里有更多细节: from django.contrib.auth.models import AbstractBaseUser, BaseUserManager class UserManager(BaseUserManager): pass class User(AbstractBaseUser): objects = UserManage
user=request.user
获取正确的模型名称时,我遇到了一些问题,它会显示每个用户喜欢的用户,即使是学生。
好的,这里有更多细节:
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager
class UserManager(BaseUserManager):
pass
class User(AbstractBaseUser):
objects = UserManager()
pass
class Student(User):
pass
当在视图代码中尝试获取user=request.user时,我需要获取用户模型名以向他们显示不同的视图。我用django多态性尝试了它,它对其他对象很有用,但是当我尝试从它继承所有东西时,我不知道如何做。
我试过这样的方法:
class User(AbstractBaseUser, PolymorphicModel):
pass
在经理中:
class UserManager(BaseUserManager, PolymorphicManager):
pass
但它不起作用,请有人告诉我如何一起配置它们,或者说从请求中获得正确型号名称的更好方法。用户我找到了一些决策,下面是代码:
class InheritanceMetaclass(ModelBase):
def __call__(cls, *args, **kwargs):
obj = super(InheritanceMetaclass, cls).__call__(*args, **kwargs)
return obj.get_object()
class User(AbstractBaseUser):
__metaclass__ = InheritanceMetaclass
object_class = models.CharField(max_length=20)
objects = BaseUserManager()
def get_object(self):
if not self.object_class or self._meta.model_name == self.object_class:
return self
else:
return getattr(self, self.object_class)
def save(self, *args, **kwargs):
if not self.object_class:
self.object_class = self._meta.model_name
super(User, self).save( *args, **kwargs)
# inherits
class User1(User):
text1 = models.CharField(max_length=20)
text2 = models.CharField(max_length=20)
class User2(User):
text3 = models.CharField(max_length=20)
text4 = models.CharField(max_length=20)
这很管用,但我相信这应该是更好的方法。
现在您可以在object\u class属性,user.object\u class
这里还有一条路:
def get_class_name(instance):
return instance.__class__.__name__
然后:
classname = get_class_name(user)
但我认为这无论如何都不是好办法……你需要用一句话来区分它们。用户的独特性如何?即,他们是否有不同的用户组?如果是这样,您可以执行如下操作:
isStudent=request.user.groups.get(name='Student')
。然后在if
语句中在您的视图中使用它。我在这里发现了一些没有django多态性的决策,但是我想知道更多关于使用django多态性的信息。[这里是]()我以前从未玩过多态性,直到今天晚些时候我才有设备来测试它。你还有问题吗???我发布了一个答案,但也许有人会给出更好的决定。