是否有一种方法来过滤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')