有没有办法过滤 django 模型,其中两个字段在一起是唯一的?
例如,我有这个模型:
class Sequence(models.Model):
id = models.CharField(max_length=25, primary_key=True)
taxonomy = models.CharField(max_length=25)
sequence = models.TextField()
可以有多个具有相同序列和分类的 Sequence 对象。我想要拥有一个唯一的序列对象子集,其中没有分类法具有多个相同的序列,并且如果有多个序列,则仅选择一个对象。
到目前为止,我已经尝试迭代结果:
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
这给了我正确的结果,但我需要总体计数,因为我稍后要进行分页。
这也让我更接近,但在调用值后我无法访问完整的 Sequence 对象:
result = Sequence.objects.values("sequence", "taxonomy").annotate(id=Max("id"))
如果有人能给我指出正确的方向,我将不胜感激!谢谢。
最佳答案
您已经用 MySQL 标记了您的问题,所以我猜您正在使用该数据库。在这种情况下这是不幸的,因为 Django ORM 可以做你想做的事情,但只能在 PostgreSQL 上。
https://docs.djangoproject.com/en/1.8/ref/models/querysets/#distinct
在 Postgres 数据库上你可以这样做:
Sequence.objects.order_by('taxonomy', 'sequence').distinct('taxonomy', 'sequence')
关于python - Django unique_together 但仅用于过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31755766/