我想对模型执行过滤并返回具有特定属性的所有对象。
model.objects.filter(hasattr(model, 'attrname'))
这显然不起作用,但不确定如何有效地实施siilar。
由于
修改
我将使用它的一个示例是从另一个
继承模型class model1(models.Model):
...
class model2(model1):
...
如果我执行model1.objects.all()
model2
中的每个返回对象都将具有额外属性
答案 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)
希望有所帮助