2014-09-02 71 views
0

我有这样一个模型下面过滤器在查询集独特的记录基于模型场在Django

class SafetyRead(models.Model): 
    name = models.CharField(max_length=256) 
    accession_number = models.CharField(max_length=256) 
    data = models.CharField(max_length=256) 
    approved = models.BooleanField() 
    radiologist = models.BooleanField() 

    def __unicode__(self): 
     return 'SafetyRead - %s'%self.accession_number 

通常当我在下面的方式,我得到的结果

查询进行搜索

SafetyRead.objects.filter(approved=False,radiologist=False) 

结果

[<SafetyRead: SafetyRead - 2983>, <SafetyRead: SafetyRead- 2582>, <SafetyRead: SafetyRead - 2583>, <SafetyRead: SafetyRead - 2522>, <SafetyRead: SafetyRead - 2522>] 

正如你可以从上面的查询观察结果中的最后两个记录被复制与现场accession_number2522

所以我想根据喜欢同样的查询集格式字段accession_number过滤独特SafetyRead对象记录(删除重复的accession_number 2522记录后)

[<SafetyRead: SafetyRead - 2983>, <SafetyRead: SafetyRead- 2582>, <SafetyRead: SafetyRead - 2583>, <SafetyRead: SafetyRead - 2522] 

那么如何过滤呢?

+0

从你想离开这两个重复的记录呢?那个更大的ID? – 2014-09-02 08:38:33

回答

0

我相信你正在寻找distinct

尝试:

SafetyRead.objects.filter(approved=False,radiologist=False).distinct() 
+0

但是通过使用'distinct'它给了'*** NotImplementedError:DISTINCT ON字段不被这个数据库后端支持'错误 – 2014-09-02 09:02:06

+0

对不起,我错过了文档中的某些东西,如果你只能传递一个字段到'distinct' '使用postgres。我已经更新了答案。 – crhodes 2014-09-02 09:06:21

+0

但是,如果我们只使用'disticnt()',结果将是相同的,因为它会根据id删除重复记录,但是我们想删除包含重复'accession_number'模型字段值的重复记录 – 2014-09-02 09:09:55