【发布时间】:2012-03-01 19:56:52
【问题描述】:
Python 和 django 新手问题,代码如下:
class Client(User)
#some fields
client=Client()
client.save()
user=User.objects.all()[0]
#want to ckeck type of user, expect that it is Client:
isinstance(user,Client) #returns false
#but this works:
isinstance(user,User) #returns true
但我希望该用户是客户。怎么了?
补充: 需要先获取子类对象,它工作正常:
if hasattr(user,'client'):
client=user.client
加法 2: 伙计们,你们太生气了,所以我不敢在这个问题上发表更多内容 :) 它已关闭,我完全理解我在 django、python、多态性和其他知识方面的绝对真空IT 技术,谢谢 ))
【问题讨论】:
-
你做错了。 Django 有一个“组”模型,可以让您区分不同类型的用户。不要像这样子类化 Django 的
User类。阅读这样的问题:stackoverflow.com/questions/4789021/…。这才是正确的做法。删除所有试图继承User的代码。关闭这个问题。并正确使用Group重新开始。 -
为什么不继承用户? Django 允许它:docs.djangoproject.com/en/dev/topics/db/models/…。我需要使用自定义字段来扩展用户,所以子类化没有任何问题。
-
但是用于区分的组看起来不错,我用那个,谢谢
-
“需要使用自定义字段扩展用户”。这就是为什么用户有一个“个人资料”扩展名。阅读:docs.djangoproject.com/en/1.3/topics/auth/…。不要子类化用户。而且 - 一般来说 - 子类的工作方式与您在问题中描述它们的方式不同。如果你认为你需要使用
isinstance,那你就没有理解多态性。根据您的需要,只需阅读有关组和配置文件的 Django 文档。
标签: python django inheritance