Django - 过滤相关子集(外键) - 错误

时间:2017-02-12 15:04:19

标签: django filter subset

在inspectdb之后我有这样的模型

class User(models.Model):
    id = models.AutoField(primary_key=True)
    login = models.CharField(max_length=30)
    ...
    created_on = models.DateTimeField(blank=True, null=True)
    updated_on = models.DateTimeField(blank=True, null=True)
    ...

    class Meta:
        managed = False
        db_table = 'users'

    def __str__(self) :
        return(self.lastname + ' ' + self.firstname)


class Journal(models.Model):
    id = models.AutoField(primary_key=True)
    user_id = models.ForeignKey(User, db_column='user_id')
    notes = models.TextField(blank=True, null=True)
    created_on = models.DateTimeField()

    class Meta:
        managed = False
        db_table = 'journals'

在这种情况下,我试图获取指定用户在指定日期之后创建的所有日记帐。

user = User.objects.get(id=12)
myCount = user.journal_set.filter(created_on>myDay).count()

在这里,我收到了下一个错误:

Traceback (most recent call last):
  File "<console>", line 1, in <module>
NameError: name 'created_on' is not defined

这里有人可以提供帮助:如何计算此模型中指定用户创建的相关期刊? 谢谢!

2 个答案:

答案 0 :(得分:0)

你不能使用“&gt;”比较Django .filter()函数中的日期。请改用“__gt =”。

所以,而不是:

myCount = user.journal_set.filter(created_on>myDay).count()

尝试:

myCount = user.journal_set.filter(created_on__gt=myDay).count()

相关文档: https://docs.djangoproject.com/en/1.10/ref/models/querysets/#gt

答案 1 :(得分:0)

假设myDay是一个python datetime对象,你可以这样做:

myCount = user.journal_set.filter(created_on__gt=myDay).count()

(注意字段名称和运算符gt之间的双下划线)

有关筛选字段的各种选项,请参阅https://docs.djangoproject.com/en/1.10/topics/db/queries/#retrieving-specific-objects-with-filters。如果您希望在计数中包含myDay上创建的期刊,则可以使用created_on__gte=myDay进行过滤。