使用hasattr(或类似的东西)的Django过滤查询

时间:2011-01-31 22:52:50

标签: django filter

我想对模型执行过滤并返回具有特定属性的所有对象。

model.objects.filter(hasattr(model, 'attrname'))

这显然不起作用,但不确定如何有效地实施siilar。

由于

修改

我将使用它的一个示例是从另一个

继承模型
class model1(models.Model):
    ...

class model2(model1):
    ...

如果我执行model1.objects.all() model2中的每个返回对象都将具有额外属性

4 个答案:

答案 0 :(得分:2)

这没有多大意义。所有模型实例都具有相同的属性,如模型类所定义。你的实际目标是什么?

修改不,他们没有。如果你做Model1.objects.all(),所有结果都将是Model1的实例,并且只有Model1的属性。

答案 1 :(得分:1)

如果模型相关,则可以在过滤器中显示为空。

model1.objects.filter('related_name__field_name__isnull=False)

其中名称与model2中的外键相关

例如:     类Owner(models.Model):     用户= models.CharField(max_length = 10)

class Car(models.Model):
    car_type = models.CharField(max_length=10)
    owner = models.ForeignKey(Owner, related_name='cars', 
        on_delete=models.CASCADE)

有车的车主: owners = Owner.objects.filter(cars__id__isnull=False)

答案 2 :(得分:0)

我只是把它放在:

try:
    ....
except AttributeError:
    ....

答案 3 :(得分:0)

我这样做的方法是抑制FieldError异常:

from django.core.exceptions import FieldError
from contextlib import suppress

with suppress(FieldError):
    model.objects.filter(field_in_other_class=value)

希望有所帮助