【问题标题】:Django filter query using hasattr (or something like it)使用 hasattr(或类似的东西)的 Django 过滤器查询
【发布时间】:2019-12-19 14:47:46
【问题描述】:

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

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

这显然行不通,但不确定如何有效地实现类似的东西。

谢谢

编辑

我会使用它的一个例子是当一个模型从另一个模型继承时

class model1(models.Model):
    ...

class model2(model1):
    ...

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

【问题讨论】:

    标签: django filter


    【解决方案1】:

    如果模型相关,可以在过滤器中为isnull。

    model1.objects.filter('related_name__field_name__isnull=False)
    

    model2 中外键的相关名称在哪里

    例如: 类所有者(模型。模型): user = 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)

    【讨论】:

    • 您的意思是“在过滤器中使用 isnull 吗?”
    • @AnnKilzer 是的,'owners = Owner.objects.filter(cars__id__isnull=False)'
    【解决方案2】:

    我只是把它放在一个:

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

    【讨论】:

      【解决方案3】:

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

      from django.core.exceptions import FieldError
      from contextlib import suppress
      
      with suppress(FieldError):
          model.objects.filter(field_in_other_class=value)
      

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 2018-10-12
        • 2021-11-04
        • 1970-01-01
        • 2011-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多