查询具有多个字段值的对象

时间:2011-06-15 05:46:48

标签: django

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

My Test Model有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 

我已经给出了三种状态:'打开','已关闭'和'正在处理'

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

2 个答案:

答案 0 :(得分:1)

更简单的方法是使用__in

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

.exclude

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

答案 1 :(得分:0)

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

from django.db.models import Q

test_logs = InspectorTestLog.objects.fiter(Q(status__status='Open') | Q(status__status='Under Process'))

这将检索状态为“打开”或“正在处理”的所有test_log(默认情况下排除状态为“已关闭”的那些。)

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

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