根据django中的模型字段筛选queryset中的唯一记录
我有一个像下面这样的模型根据django中的模型字段筛选queryset中的唯一记录,django,django-models,filter,django-queryset,Django,Django Models,Filter,Django Queryset,我有一个像下面这样的模型 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 = model
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>]
那么如何过滤呢?我相信您正在寻找 尝试:
您希望在两个重复记录中保留哪一个?id较大的那个?但是通过使用
distinct
它给了我***未实现错误:此数据库后端不支持字段上的distinct
错误抱歉,我在文档中遗漏了一些内容,如果使用postgres,您只能将字段传递给distinct
。我已经更新了答案。但是如果我们只使用disticnt()
,结果将是相同的,因为它将根据id删除重复记录,但我们希望根据正常distinct()调用中不正确的文档删除包含重复登录号的重复记录,在确定哪些行是不同的时,数据库会比较每行中的每个字段。对于具有指定字段名的distinct()调用,数据库将只比较指定的字段名。
但我在这里使用的是mysql,所以当我使用distinct('accessment_number')
时,它向我抱怨上述粘贴错误,当我使用justSafetyRead.objects.filter(approved=False,radiologist=False)。distinct()
我仍然得到相同的查询设置结果,重复的登录号2522
,现在该怎么办?
[<SafetyRead: SafetyRead - 2983>, <SafetyRead: SafetyRead- 2582>, <SafetyRead: SafetyRead - 2583>, <SafetyRead: SafetyRead - 2522]
SafetyRead.objects.filter(approved=False,radiologist=False).distinct()