Django unique_together,但只用于过滤



是否有一种方法来过滤django模型,其中两个字段是唯一的在一起?

例如,我有这个模型:

class Sequence(models.Model):
    id       = models.CharField(max_length=25, primary_key=True)
    taxonomy = models.CharField(max_length=25)
    sequence = models.TextField()

可以有多个序列对象具有相同的序列和分类法。我想要有一个唯一的序列对象子集,其中没有分类法有多个相同的序列,并且如果有多个,则只选择一个对象。

到目前为止,我已经尝试遍历结果:

def unique(query_set):
    used_taxa = {}
    for seq in query_set.all():
        if not seq.sequence in used_taxa:
            used_taxa[seq.sequence] = [seq.taxonomy]
            yield seq
        elif seq.sequence in used_taxa and not seq.taxonomy in used_taxa[seq.sequence]:
            used_taxa[seq.sequence].append(seq.taxonomy)
            yield seq
        else:
            pass

这会得到正确的结果,但我需要总体计数,因为我稍后要进行分页。

这也让我更接近,但我不能访问完整的序列对象之后的值已被调用:

result = Sequence.objects.values("sequence", "taxonomy").annotate(id=Max("id"))
如果有人能给我指出正确的方向,我将非常感激!谢谢。

你已经用MySQL标记了你的问题,所以我猜你正在使用那个数据库。在这种情况下,这是不幸的,因为Django ORM可以做你想做的,但只能在PostgreSQL上。

https://docs.djangoproject.com/en/1.8/ref/models/querysets/截然不同

在Postgres数据库中,你可以这样做:

Sequence.objects.order_by('taxonomy', 'sequence').distinct('taxonomy', 'sequence')

最新更新