python - Django unique_together 但仅用于过滤

标签 python mysql django

有没有办法过滤 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/

相关文章:

python - 如何在 python 中计算一级 SVM 的 AUC?

python - 从反斜杠到斜杠(创建以数字命名的文件夹)

PHP、MySQL、PDO 事务 - 调用 commit() 后是否可以使用 rollBack()?

MySql:返回变量中的 ID 列表并在 IN 子句中重用该变量

django - 如何使用 django-extra-views 将请求传递到内联表单集中

python - 如何使用不可转换值的默认值执行 df ["col1"].astype(float) ?

python - 删除重复的嵌套列表Python依赖于位置

mysql - 创建表 : You have an error in your SQL syntax near 'order( order_id INT UNSIGNED NOT NULL AUTO_INCREMENT, user_id ' at line 1 时出错

python - Django:我可以在不过滤所有模型实例的情况下检查模型实例是否与过滤器匹配吗

python - django - 不显示模板文件中的更改