【问题标题】:Django - filtering related subset (foreign key) - ErrorDjango - 过滤相关子集(外键) - 错误
【发布时间】:2024-01-12 08:41:01
【问题描述】:

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

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

【问题讨论】:

    标签: django filter subset


    【解决方案1】:

    假设myDay是一个python日期时间对象,你可以这样做:

    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 进行过滤。

    【讨论】:

      【解决方案2】:

      您不能使用 ">" 来比较 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

      【讨论】: