如何判断Django对象是否由父类';s Queryset实际上是子类中具有相关数据的对象?

如何判断Django对象是否由父类';s Queryset实际上是子类中具有相关数据的对象?,django,django-models,python-2.7,django-queryset,django-orm,Django,Django Models,Python 2.7,Django Queryset,Django Orm,我的问题:在模型类的save()、clean()和一次性方法中,引用了子模型的父模型。这些引用在子模型的子模型中失败,因为需要引用父模型的父模型。检查[object].[child class name as attribute]失败,因为所有对象都具有此属性,但试图在子类的表中没有相关对象的对象上访问此属性会导致异常 鉴于以下模型: 。。。 从django_extensions.db.fields导入UUIDField 类事件(models.Model): uuid=UUIDField() .

我的问题:在模型类的
save()
clean()
和一次性方法中,引用了子模型的父模型。这些引用在子模型的子模型中失败,因为需要引用父模型的父模型。检查
[object].[child class name as attribute]
失败,因为所有对象都具有此属性,但试图在子类的表中没有相关对象的对象上访问此属性会导致异常

鉴于以下模型:

。。。
从django_extensions.db.fields导入UUIDField
类事件(models.Model):
uuid=UUIDField()
...
类TicketedEvent(事件):
...
def save():
#处理父级的数据
... self.event.uuid。。。
#TicketedConcert对象也使用此save()
#但需要参考self.ticketedevent.event.uuid
课堂票证音乐会(票证活动):
...
在查找
TicketedEvent.objects.all()的结果时,我会看到所有TicketedEvent和TicketedConcert对象,并且查找
TicketedConcert.objects.all()的结果时,只显示TicketedConcert对象

我的目的是检测
TicketedEvent.objects.all()
中的给定对象是否实际上是TicketedConcert对象,而无需在
try:/except:
中围绕我的所有工作

我希望只有实际为
ticketdconcert
对象的对象才具有该属性(由
给定。选择相关()
。ticketdconcert
包含
ticketdconcert
模型的相关数据。当试图基于子类属性的存在性(True/False)来
.exclude()
时,这给了我以下错误:

>>TicketedEvent.objects.选择相关().exclude(ticketedconcert=True)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/Users/Bryson/.virtualenvs/spyon/lib/python2.7/site packages/django/db/models/query.py”,第557行,在exclude中
返回self.\u filter\u或\u exclude(True、*args、**kwargs)
文件“/Users/Bryson/.virtualenvs/spyon/lib/python2.7/site packages/django/db/models/query.py”,第566行,在过滤或排除中
clone.query.add_q(~q(*args,**kwargs))
文件“/Users/Bryson/.virtualenvs/spyon/lib/python2.7/site packages/django/db/models/sql/query.py”,第1191行,在add_q中
self.add_q(子级,使用的别名,force_having=force_having)
文件“/Users/Bryson/.virtualenvs/spyon/lib/python2.7/site packages/django/db/models/sql/query.py”,第1194行,在add_q中
can_reuse=使用的_别名,force_having=force_having)
文件“/Users/Bryson/.virtualenvs/spyon/lib/python2.7/site packages/django/db/models/sql/query.py”,第1072行,添加过滤器
可重复使用)
文件“/Users/Bryson/.virtualenvs/spyon/lib/python2.7/site packages/django/db/models/sql/query.py”,第1521行,拆分为
如果活动位置[-1]>1:
索引器:列表索引超出范围
>>> 
此外,我还尝试基于existance/Null来
.exclude()
,如下所示:

>>TicketedEvent.objects.选择相关().exclude(ticketedconcert\uu isnull=True)
[, ]
事实上,两个返回的事件都是
TicketedConcert
。在子类作为属性存在时检查null只返回实际具有子类对象的对象。显然,父模型返回的每个对象都将子类作为属性,但在非子类对象上访问它失败。我的预期结果是,只有实际具有关联子类对象的对象才会具有该属性

这是我的问题。当父类访问某个对象时,如何判断该属性中是否有数据(因此实际上是子类)

我最初的尝试如下:

如果hasattr(self,ticketedconcert):
#对这些数据做不同的工作,这是一场音乐会
其他:
#对该数据执行正常的、非协调的工作
这继续给我错误,因为每个对象都有该属性,而不管其使用能力如何

Event.objects.exclude(
    id__in=TicketedConcert.objects.values_list('id', flat=True)
)
“我的意图是防止TicketedConcert子类对象包含在父类的结果中。”

我不确定这是否是处理实例的最佳解决方案。例如:

if tevent.id in TicketedConcert.objects.values_list('id', flat=True):
    # the event is a concert
else:
    # the event is not a TicketedConcert

但是,它会起作用,而且不会表现得太糟糕(可能)。

这并没有告诉我关于对象的任何信息,它只是从结果中排除音乐会。我必须误解
我的意图:排除模型(a)的对象,而模型(b)是另一个模型(b)的子类从模型b的管理界面。
我的问题:我不知道如何从queryset
Oops中筛选这些对象,这是询问另一个问题时留下的,该问题与此问题的一部分相同。我的错误。
if tevent.id in TicketedConcert.objects.values_list('id', flat=True):
    # the event is a concert
else:
    # the event is not a TicketedConcert