检查从Base类集合中获取的对象是否是Django中子类的对象

时间:2012-02-09 10:39:01

标签: python django inheritance

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,polymorphism等知识的绝对真空IT技术,谢谢))

2 个答案:

答案 0 :(得分:2)

问题是Django的查询集不知道继承。因此,当您在User上查询时,它将不会返回子类。

最简单的解决方案是做这样的事情:

try:
    client = user.client
except Client.DoesNotExist:
    # handle exception

当然,如果你有多个User子类,这会稍微复杂一些。有很多方法可以让Django正确地进行模型继承,但它们都有点hacky。

答案 1 :(得分:0)

你的期望是错误的。您查询User课程,为什么期望从中获得Client?!