【问题标题】:Query Objects with more than one field values查询具有多个字段值的对象
【发布时间】:2011-09-15 06:20:25
【问题描述】:

基本上我想查询打开和处理中的测试日志并排除关闭的测试日志

我的测试模型有 Status 字段,它是 BugStatus 模型的外键,如下所示:

class InspectorTestLog(models.Model):
    expected_result = models.TextField(max_length = 1000, blank = True) 
    status = models.ForeignKey(BugStatus, blank = True , null = True)
    datetime = models.DateTimeField(auto_now_add = True)

class BugStatus(models.Model):
    status = models.CharField(max_length = 50)status
    description = models.TextField(max_length = 1000, blank = True, null = True) 
    def __unicode__(self): 
        return self.status 

我给出了三种状态,分别是“Open”、“Closed”和“Under Process”

如何查询状态为(“打开”和“处理中”)的 InspectorTestLog 对象并排除“关闭”对象

【问题讨论】:

    标签: django


    【解决方案1】:

    更简单的方法是使用__in

    InspectorTestLog.objects.filter(status__status__in=['Open', 'Under Process'])
    

    .exclude:

    InspectorTestLog.objects.exclude(status__status='Closed')
    

    【讨论】:

      【解决方案2】:

      您可以使用 Q 对象来组合查询。在您的情况下,您的查询可能如下所示:

      from django.db.models import Q
      
      test_logs = InspectorTestLog.objects.fiter(Q(status__status='Open') | Q(status__status='Under Process'))
      

      这将检索状态为“打开”或“处理中”的所有测试日志(默认情况下排除状态为“已关闭”的测试日志。)

      您还可以编写一个查询,只排除具有“已关闭”状态的 test_logs,这将完成同样的事情:

      test_logs = InspectorTestLog.objects.exclude(status__status='Closed')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-03
        • 1970-01-01
        相关资源
        最近更新 更多