5

如标题所述,在 Django 中:

假设我有一个模型名称 QuestionRecord,有两个字段:full_scoreactual_score. 我想实现SQL:

select * from QuestionRecord as QR where QR.full_score!=QR.actual_score.

也许使用原始 sql 是可以的,但我想像这样实现它:

class QuestionRecord_QuerySet(models.query.QuerySet):
    def incorrect(self):# Find out those whose full_score and actual_score are not equal
        return self.filter(...) # **What should I write here??**

class QuestionRecord_Manager(models.Manager):
    def get_query_set(self):
        return QuestionRecord_QuerySet(self.model)

class QuestionRecord(models.Model):
    objects = QuestionRecord_Manager()

有什么办法吗?

4

1 回答 1

6

当然,这就是" F" 对象的用途!

from django.db.models import F

# snip

    return self.exclude(full_score = F('actual_score'))

在这里使用QuerySet.exclude,因为您不想得到匹配的结果。

如果你真的想使用QuerySet.filter,你可以使用一个否定的Q”对象self.filter(~Q(full_score = F('actual_score')))

于 2013-06-11T09:49:59.037 回答