我有两个类作为抽象类的子类(下面的示例)。 如何检查queryset模型是否是这些类中的一个?
class Parent(models.Model)
field_a = models.CharField(primary_key = True, max_length = 24)
field_b = models.CharField(primary_key = True, max_length = 24)
class Meta:
abstract = True
class A(Parent)
pass
class B(Parent)
pass
我已经厌倦了像这样的事情,但是它不起作用:
if type(queryset.model) == type(A):
do something...
elif type(queryset.model) == type(B):
do something else...
因为当我检查类型(queryset.model)时,它返回了类型(父母), 甚至queryset.model都是A或B类。
答案 0 :(得分:0)
更准确地说, issubclass 无法正常工作。 isinstance 方法也不起作用,因为我检查的对象不是实例。
例如,我的问题是当我拥有一个子模型的查询集,而我又不确切知道该如何检查哪个子模型时?
例如:
queryset = A.objects.all()
# or
queryset = B.objects.all()
如果我不对查询集(动态方法)进行此类检查,则在两种情况下均返回false:
if type(queryset.model) == type(A):
do something...
elif type(queryset.model) == type(B):
do something else...
因为是,所以:
type(queryset.model) == type(Parent)
我的解决方案是使用__name__,但我不知道是否有更好的方法?
if queryset.model.__name__ == A.__name__:
do something...
elif queryset.model.__name__ == B.__name__:
do something else...
答案 1 :(得分:0)
您应该直接将queryset.model与该类进行比较。
类似的事情应该起作用:
if queryset.model == A:
# do your stuff